目录
2、 获取当前日期或时间type === 'date' 获取日期 === 'time' 获取时间
1、验证URL格式
export function url(value) {
return /^((https|http|ftp|rtsp|mms):\/\/)(([0-9a-zA-Z_!~*'().&=+$%-]+: )?[0-9a-zA-Z_!~*'().&=+$%-]+@)?(([0-9]{1,3}.){3}[0-9]{1,3}|([0-9a-zA-Z_!~*'()-]+.)*([0-9a-zA-Z][0-9a-zA-Z-]{0,61})?[0-9a-zA-Z].[a-zA-Z]{2,6})(:[0-9]{1,4})?((\/?)|(\/[0-9a-zA-Z_!~*'().;?:@&=+$,%#-]+)+\/?)$/
.test(value)
}
2、 获取当前日期或时间type === 'date' 获取日期 === 'time' 获取时间
export function getDateTime(type) {
const date = new Date();
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
let hour = date.getHours();
let minute = date.getMinutes();
let second = date.getSeconds();
month = month > 9 ? month : "0" + month;
day = day > 9 ? day : "0" + day;
hour = hour > 9 ? hour : "0" + hour;
minute = minute > 9 ? minute : "0" + minute;
second = second > 9 ? second : "0" + second;
if (type === 'date') {
return `${year}-${month}-${day}`;
} else if (type === 'datetime') {
return `${year}-${month}-${day} ${hour}:${minute}`
} else if (type === 'time') {
return `${hour}:${minute}`;
} else if (type === 'wholedatetime') {
return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
}
}
3、日期+时间选择框转换字符串
参数date为时间选择框回调参数 返回一个时间数组:字符串格式、时间格式
// 日期+时间选择框转换字符串 参数date为时间选择框回调参数 返回一个时间数组:字符串格式、时间格式
export function dealDate(date) {
const Y = date.year
const M = date.month
const D = date.day
var dateString = Y + '-' + M + '-' + D
if (date.hour) {
const hh = date.hour
const mm = date.minute
const ss = date.second
dateString = Y + '-' + M + '-' + D + ' ' + hh + ':' + mm + ':' + ss
}
return dateString
}
4、格式化时间
timeFormat | date(timestamp, format = "yyyy-mm-dd")
该函数必须传入第一个参数,第二个参数是可选的,函数返回一个格式化好的时间。
time <String> 任何合法的时间格式
format <String> 时间格式,可选。
默认为yyyy-mm-dd,年为"yyyy",月为"mm",日为"dd",时为"hh",分为"MM",秒为"ss",格式可以自由搭配
如: yyyy:mm:dd,yyyy-mm-dd,yyyy年mm月dd日,yyyy年mm月dd日 hh时MM分ss秒,yyyy/mm/dd/,MM:ss等组合
/**
* 格式化时间
timeFormat | date(timestamp, format = "yyyy-mm-dd")
该函数必须传入第一个参数,第二个参数是可选的,函数返回一个格式化好的时间。
time <String> 任何合法的时间格式
format <String> 时间格式,可选。
默认为yyyy-mm-dd,年为"yyyy",月为"mm",日为"dd",时为"hh",分为"MM",秒为"ss",格式可以自由搭配
如: yyyy:mm:dd,yyyy-mm-dd,yyyy年mm月dd日,yyyy年mm月dd日 hh时MM分ss秒,yyyy/mm/dd/,MM:ss等组合
*/
export function timeFormat (dateTime = null, fmt = 'yyyy-mm-dd') {
// 如果为null,则格式化当前时间
if (!dateTime) dateTime = Number(new Date())
// 如果dateTime长度为10或者13,则为秒和毫秒的时间戳,如果超过13位,则为其他的时间格式
if (dateTime.toString().length === 10) dateTime *= 1000
const date = new Date(dateTime)
let ret
const opt = {
'y+': date.getFullYear().toString(), // 年
'm+': (date.getMonth() + 1).toString(), // 月
'd+': date.getDate().toString(), // 日
'h+': date.getHours().toString(), // 时
'M+': date.getMinutes().toString(), // 分
's+': date.getSeconds().toString() // 秒
// 有其他格式化字符需求可以继续添加,必须转化成字符串
}
for (const k in opt) {
ret = new RegExp('(' + k + ')').exec(fmt)
if (ret) {
fmt = fmt.replace(ret[1], (ret[1].length === 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, '0')))
}
}
return fmt
}
5、随机生成32位数
// 随机生成32位数
export function randomGenerateMath() {
let $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2022112';
let maxPos = $chars.length;
let num = '';
for (let i = 0; i < 32; i++) {
num += $chars.charAt(Math.floor(Math.random() * maxPos));
}
return num;
}
6、前端分页展示数据
// 前端分页展示数据
export function pageData(pageNo, pageSize, data) {
let pageData = [];
let start = (pageSize * pageNo) - pageSize; //设置开始
let end = pageSize * pageNo; //设置结束
end = end > data.length ? data.length : end;
for(let i = start; i < end; i++) {
pageData.push(data[i]);
};
return pageData;
}
7、判断日期是不是今天,昨天,明天
// 判断日期是不是今天,昨天,明天
export function isDate(str) {
let d = new Date(str).setHours(0, 0, 0, 0);
let today = new Date().setHours(0, 0, 0, 0);
let obj = {
'-86400000': '昨天',
'0': '今天',
'86400000': '明天'
};
return obj[d - today] || '999';
}
8、坐标转化:gcj02转wgs84
// gcj02转wgs84
export function gcj02towgs84(lng, lat) {
lat = parseFloat(lat)
lng = parseFloat(lng)
// 定义一些常量
var PI = 3.1415926535897932384626
var a = 6378245.0
var ee = 0.00669342162296594323
function transformlat(lng, lat) {
var ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng))
ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0
ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0
ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0
return ret
}
function transformlng(lng, lat) {
var ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng))
ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0
ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0
ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0
return ret
}
// 判断是否在国内,不在国内则不做偏移
function out_of_china(lng, lat) {
return (lng < 72.004 || lng > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false)
}
if(out_of_china(lng, lat)) {
return [lng, lat]
} else {
var dlat = transformlat(lng - 105.0, lat - 35.0)
var dlng = transformlng(lng - 105.0, lat - 35.0)
var radlat = lat / 180.0 * PI
var magic = Math.sin(radlat)
magic = 1 - ee * magic * magic
var sqrtmagic = Math.sqrt(magic)
dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI)
dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI)
var mglat = lat + dlat
var mglng = lng + dlng
return [lng * 2 - mglng, lat * 2 - mglat]
}
}
9、坐标转化:wgs84转gcj02
// wgs84转gcj02
export function wgs84togcj02(lng, lat) {
lat = parseFloat(lat)
lng = parseFloat(lng)
// 定义一些常量
var PI = 3.1415926535897932384626
var a = 6378245.0
var ee = 0.00669342162296594323
function transformlat (lng, lat) {
var ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng))
ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0
ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0
ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0
return ret
}
function transformlng (lng, lat) {
var ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng))
ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0
ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0
ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0
return ret
}
// 判断是否在国内,不在国内则不做偏移
function out_of_china (lng, lat) {
return (lng < 72.004 || lng > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false)
}
if(out_of_china(lng, lat)) {
return [lng, lat]
} else {
var dlat = transformlat(lng - 105.0, lat - 35.0)
var dlng = transformlng(lng - 105.0, lat - 35.0)
var radlat = lat / 180.0 * PI
var magic = Math.sin(radlat)
magic = 1 - ee * magic * magic
var sqrtmagic = Math.sqrt(magic)
dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI)
dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI)
var mglat = lat + dlat
var mglng = lng + dlng
return [mglng, mglat]
}
}
10、计算两个经纬度之间的距离(单位:千米)
// 计算两个经纬度之间的距离(单位:千米)
export function calculateDistance(lat1, lng1, lat2, lng2) {
lat1 = parseFloat(lat1);
lng1 = parseFloat(lng1);
lat2 = parseFloat(lat2);
lng2 = parseFloat(lng2);
lat1 = lat1 || 0;
lng1 = lng1 || 0;
lat2 = lat2 || 0;
lng2 = lng2 || 0;
var rad1 = (lat1 * Math.PI) / 180.0;
var rad2 = (lat2 * Math.PI) / 180.0;
var a = rad1 - rad2;
var b = (lng1 * Math.PI) / 180.0 - (lng2 * Math.PI) / 180.0;
var r = 6378.137;
var distance = r * 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(rad1) * Math.cos(rad2) * Math.pow(Math.sin(b /2), 2)));
return distance.toFixed(2);
}
11、获取随机字符串
// 获取随机字符串
export function getRandomStr () {
const arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']
const arr2 = []
for (let i = 0; i < 34; i++) {
var index = Math.floor(Math.random() * arr.length + 1) - 1
arr2.push(arr[index])
}
return arr2.join('')
}
12、金额转大写
// 金额大写转换
export function Arabia_To_Chinese (num) {
var Num = parseFloat(num).toString()
for (var i = Num.length - 1; i >= 0; i--) {
Num = Num.replace(',', '')// 替换tomoney()中的“,”
Num = Num.replace(' ', '')// 替换tomoney()中的空格
}
Num = Num.replace('¥', '')// 替换掉可能出现的¥字符
if (isNaN(Num)) {
return
}
// ---字符处理完毕,开始转换,转换采用前后两部分分别转换---//
var part = String(Num).split('.')
var newchar = ''
/* 小数点前进行转化 */
for (var j = part[0].length - 1; j >= 0; j--) {
if (part[0].length > 10) {
alert('位数过大,无法计算')
return ''
}
var tmpnewchar = ''
var perchar = part[0].charAt(j)
switch (perchar) {
case '-':
tmpnewchar = '负' + tmpnewchar
break
case '0':
tmpnewchar = '零' + tmpnewchar
break
case '1':
tmpnewchar = '壹' + tmpnewchar
break
case '2':
tmpnewchar = '贰' + tmpnewchar
break
case '3':
tmpnewchar = '叁' + tmpnewchar
break
case '4':
tmpnewchar = '肆' + tmpnewchar
break
case '5':
tmpnewchar = '伍' + tmpnewchar
break
case '6':
tmpnewchar = '陆' + tmpnewchar
break
case '7':
tmpnewchar = '柒' + tmpnewchar
break
case '8':
tmpnewchar = '捌' + tmpnewchar
break
case '9':
tmpnewchar = '玖' + tmpnewchar
break
}
if (perchar !== '-') {
switch (part[0].length - j - 1) {
case 0:
tmpnewchar = tmpnewchar + '元'
break
case 1:
if (perchar !== 0) tmpnewchar = tmpnewchar + '拾'
break
case 2:
if (perchar !== 0) tmpnewchar = tmpnewchar + '佰'
break
case 3:
if (perchar !== 0) tmpnewchar = tmpnewchar + '仟'
break
case 4:
tmpnewchar = tmpnewchar + '万'
break
case 5:
if (perchar !== 0) tmpnewchar = tmpnewchar + '拾'
break
case 6:
if (perchar !== 0) tmpnewchar = tmpnewchar + '佰'
break
case 7:
if (perchar !== 0) tmpnewchar = tmpnewchar + '仟'
break
case 8:
tmpnewchar = tmpnewchar + '亿'
break
case 9:
tmpnewchar = tmpnewchar + '拾'
break
}
}
newchar = tmpnewchar + newchar
}
/* 小数点之后进行转化 */
if (Num.indexOf('.') !== -1) {
if (part[1].length > 2) {
part[1] = part[1].substr(0, 2)
}
for (i = 0; i < part[1].length; i++) {
tmpnewchar = ''
perchar = part[1].charAt(i)
switch (perchar) {
case '0':
tmpnewchar = '零' + tmpnewchar
break
case '1':
tmpnewchar = '壹' + tmpnewchar
break
case '2':
tmpnewchar = '贰' + tmpnewchar
break
case '3':
tmpnewchar = '叁' + tmpnewchar
break
case '4':
tmpnewchar = '肆' + tmpnewchar
break
case '5':
tmpnewchar = '伍' + tmpnewchar
break
case '6':
tmpnewchar = '陆' + tmpnewchar
break
case '7':
tmpnewchar = '柒' + tmpnewchar
break
case '8':
tmpnewchar = '捌' + tmpnewchar
break
case '9':
tmpnewchar = '玖' + tmpnewchar
break
}
if (i === 0) tmpnewchar = tmpnewchar + '角'
if (i === 1) tmpnewchar = tmpnewchar + '分'
newchar = newchar + tmpnewchar
}
}
/* 替换所有无用汉字 */
while (newchar.search('零零') !== -1) { newchar = newchar.replace('零零', '零') }
newchar = newchar.replace('零亿', '亿')
newchar = newchar.replace('亿万', '亿')
newchar = newchar.replace('零万', '万')
newchar = newchar.replace('零元', '元')
newchar = newchar.replace('零角', '')
newchar = newchar.replace('零分', '')
if (newchar.charAt(newchar.length - 1) === '元' || newchar.charAt(newchar.length - 1) === '角') { newchar = newchar + '整' }
return newchar
}
13、判断两个对象是否相同
// 判断两个对象是否相同
export function isObjEqual (o1, o2) {
var props1 = Object.getOwnPropertyNames(o1)
var props2 = Object.getOwnPropertyNames(o2)
if (props1.indexOf('__ob__') !== -1) {
props1.splice(props1.indexOf('__ob__'), 1)
}
if (props2.indexOf('__ob__') !== -1) {
props2.splice(props2.indexOf('__ob__'), 1)
}
var a = true
var b = true
if (props1.length !== props2.length) {
a = false
} else {
for (var i = 0, max = props1.length; i < max; i++) {
var propName = props1[i]
if (o1[propName] !== o2[propName]) {
b = false
break
}
}
}
return a && b
}
14、深度克隆
// 深度克隆
export function deepClone (obj) {
// 对常见的“非”值,直接返回原来值
if ([null, undefined, NaN, false].includes(obj)) return obj
if (typeof obj !== 'object' && typeof obj !== 'function') {
// 原始类型直接返回
return obj
}
var o = this.isArray(obj) ? [] : {}
for (const i in obj) {
if (obj.hasOwnProperty(i)) {
o[i] = typeof obj[i] === 'object' ? this.deepClone(obj[i]) : obj[i]
}
}
return o
}
15、判断是否为数组
// 判断arr是否为一个数组,返回一个bool值
export function isArray (arr) {
return Object.prototype.toString.call(arr) === '[object Array]'
}
16、手机号校验
// 手机号校验
export functionisPhone: function (phoneStr) {
var myreg = /^((13[0-9])|(14[1|4|5|6|7|8|9])|(15([0|1|2|3|5|6|7|8|9]))|(16[2|5|6|7])|(17[0|1|2|3|5|6|7|8])|(18[0-9])|(19[1|8|9]))\d{8}$/;
if (!myreg.test(phoneStr)) {
return false;
} else {
return true;
}
}
17、 身份证号校验
// 身份证号校验
export function isCard: function (cardStr) {
var myreg = /^[1-9][0-9]{5}([1][9][0-9]{2}|[2][0][0|1][0-9])([0][1-9]|[1][0|1|2])([0][1-9]|[1|2][0-9]|[3][0|1])[0-9]{3}([0-9]|[X]|[x])$/;
if (!myreg.test(cardStr)) {
return false;
} else {
return true;
}
}
18、邮箱校验
// 邮箱校验
export function isEmail: function (emailStr) {
console.log(emailStr)
var myreg = /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/;
if (!myreg.test(emailStr)) {
return false;
} else {
return true;
}
}
19、信息脱敏
身份号、手机号、姓名、用户名、邮箱 信息脱敏
// 信息脱敏
/**
*
* @param {身份号} cardStr
* @param {手机号} phoneStr
* @param {姓名} name
* @param {邮箱} emailStr
* @param {用户名} Accountname
*/
export function idcardDesensitization: function (cardStr = '', phoneStr = '', name = '', emailStr = '', Accountname = '') {
let star = '*';
const len = cardStr.toString().length - 4;
for (var i = 1; i < len; i++) {
star = star + '*';
}
return {
userName: name.replace(/.(?=.)/g, '*'),
mobile: phoneStr.substring(0, 3) + "****" + phoneStr.substring(7, 11),
idCard: star + cardStr.substring(14, 18),
Accountname: Accountname.replace(/.(?=.)/g, '*'),
email: emailStr.substr(0, 2) + "****" + emailStr.substr(emailStr.indexOf('@'))
};
}
20、AES加密方法
- npm安装crypto-js:npm install crypto-js;
- 引入crypto-js:import CryptoJS from "crypto-js" 或 const CryptoJS = require("crypto-js");
- 设置密钥和密钥偏移量:key、iv;
- 如下封装的AES加密方法;
// AES加密 :(字符串,key,iv) 返回base64,word加密的内容字符串
export function Encrypt: function (word, keyStr = s, ivStr) {
let key = CryptoJS.enc.Utf8.parse("xxxxxxxxxxxxxx")//加密密钥
let iv = CryptoJS.enc.Utf8.parse("") //明文
if (keyStr) {
key = CryptoJS.enc.Utf8.parse(keyStr);
iv = CryptoJS.enc.Utf8.parse(ivStr);
}
let srcs = CryptoJS.enc.Utf8.parse(word);
var encrypted = CryptoJS.AES.encrypt(srcs, key, {
iv: iv,
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
}
21、AES 解密方法
- npm安装crypto-js:npm install crypto-js;
- 引入crypto-js:import CryptoJS from "crypto-js" 或 const CryptoJS = require("crypto-js");
- 设置密钥和密钥偏移量:key、iv;
- 如下封装的AES解密方法;
// AES 解密 :(字符串,key,iv) 返回base64
export function Decrypt: function (word, keyStr = s, ivStr) {
let key = ''
let iv = ''
if (keyStr) {
key = CryptoJS.enc.Utf8.parse(keyStr);
iv = CryptoJS.enc.Utf8.parse(ivStr);
}
let base64 = CryptoJS.enc.Base64.parse(word);
let src = CryptoJS.enc.Base64.stringify(base64);
var decrypt = CryptoJS.AES.decrypt(src, key, {
iv: iv,
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
return decryptedStr.toString();
}
22、验证密码强度
// 验证密码强度 @param {设置的密码} oValue
export function passwordStrength: function (oValue) {
oValue = oValue.replace(/[\u4E00-\u9FA5]/g, "");
if (/\d/.test(oValue) && /[a-z]/.test(oValue) && /[A-Z]/.test(oValue)) {
return {
type: '2',
text: "强"
}
} else if (
/^\d+$/.test(oValue) ||
/^[A-Z]+$/.test(oValue) ||
/^[a-z]+$/.test(oValue)
) {
return {
type: '0',
text: "弱"
}
} else {
return {
type: '1',
text: "中"
}
}
}