js工具类合集(utils.js)

目录

1、验证URL格式

2、 获取当前日期或时间type === 'date' 获取日期  === 'time' 获取时间

3、日期+时间选择框转换字符串  

4、格式化时间

5、随机生成32位数

6、前端分页展示数据

7、判断日期是不是今天,昨天,明天

8、坐标转化:gcj02转wgs84

9、坐标转化:wgs84转gcj02

10、计算两个经纬度之间的距离(单位:千米) 

11、获取随机字符串

12、金额转大写

 13、判断两个对象是否相同

 14、深度克隆

 15、判断是否为数组

16、手机号校验

17、 身份证号校验

18、邮箱校验

19、信息脱敏

20、AES加密方法

21、AES 解密方法

22、验证密码强度

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: "中"
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_39891453/article/details/126731011