UNPKG

jsutils-100

Version:

在 lodash 基础上扩展的一些 jsUtils

247 lines (232 loc) 5.88 kB
// const lodash = require('lodash'); import lodash from 'lodash'; export default class jsUtils extends lodash { constructor() { super(); } } jsUtils.isEmpty = value => { if (lodash.isNumber(value)) { return !lodash.isNumber(value); } else { return lodash.isEmpty(value); } }; /** * 验证是否为100的倍数 * @param {Number | String} value * @returns {Boolean} */ jsUtils.isHundred = value => { return /^[0-9]*[0-9]$/i.test(value) && value % 100 === 0; }; /** * 验证数字,支持小数点 * @param {Number | String} value * @returns {Boolean} */ jsUtils.isDigit = value => { return /^[0-9]+(\.[0-9]+)?$/.test(value); }; /** * 验证数字,不支持小数点 * @param {Number | String} value * @returns {Boolean} */ jsUtils.isInteger = value => { return /^[0-9]+$/.test(value); }; /** * 验证value1和value2二者有一个不为空即可返回true * 当value1为数组时,必须数组中的每个值都不为空,value1才不为空 * @param {String | Number | Array} value1 * @param {String | Number} value2 * @returns {Boolean} */ jsUtils.isEmptyOneOfTwo = (value1, value2) => { if (lodash.isArray(value1)) { if (jsUtils.isEmpty(value2)) { let result = false; value1.forEach(item => { if (jsUtils.isEmpty(item)) { result = true; } }); return result; } else { return false; } } else { if (jsUtils.isEmpty(value1) || jsUtils.isEmpty(value2)) { return true; } else { return false; } } }; // 有一个不为空则返回true jsUtils.isEmptyOfMany = (...values) => { let result = false; values.forEach(value => { if (!jsUtils.isEmpty(value)) { result = true; } }); return result; }; /** * 如果输入内容,那么输入内容只能是汉字 * @param {String} value * @returns {Boolean} */ jsUtils.isChinese = value => { return value && /^[\u0391-\uFFE5]+$/.test(value); }; /** * 验证是否为邮箱 * @param {String} value * @returns {Boolean} */ jsUtils.isEmail = value => { return ( value && /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/.test( value ) ); }; /** * 验证是否为手机号码 * @param {String} value * @returns {Boolean} */ jsUtils.isPhoneNumber = value => { return value && /^[1][0-9][0-9]{9}$/.test(value); }; /** * 验证是否为有效的身份证号码,需要校验生日、出生地、校验位等 * @param {*} value * @returns {Boolean} */ jsUtils.isIdNumber = code => { var city = { 11: '北京', 12: '天津', 13: '河北', 14: '山西', 15: '内蒙古', 21: '辽宁', 22: '吉林', 23: '黑龙江 ', 31: '上海', 32: '江苏', 33: '浙江', 34: '安徽', 35: '福建', 36: '江西', 37: '山东', 41: '河南', 42: '湖北 ', 43: '湖南', 44: '广东', 45: '广西', 46: '海南', 50: '重庆', 51: '四川', 52: '贵州', 53: '云南', 54: '西藏 ', 61: '陕西', 62: '甘肃', 63: '青海', 64: '宁夏', 65: '新疆', 71: '台湾', 81: '香港', 82: '澳门', 91: '国外 ' }; var tip = ''; var pass = true; if ( !code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test( code ) ) { tip = '身份证号格式错误'; pass = false; } else if (!city[code.substr(0, 2)]) { tip = '地址编码错误'; pass = false; } else { //18位身份证需要验证最后一位校验位 if (code.length == 18) { code = code.split(''); //∑(ai×Wi)(mod 11) //加权因子 var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; //校验位 var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]; var sum = 0; var ai = 0; var wi = 0; for (var i = 0; i < 17; i++) { ai = code[i]; wi = factor[i]; sum += ai * wi; } var last = parity[sum % 11]; if (parity[sum % 11] != code[17]) { tip = '校验位错误'; pass = false; } } } if (!pass) console.log(tip); return pass; }; /** * 校验IP地址是否正确 * @param {String}} value * @returns {Boolean} */ jsUtils.isIp = value => { if (lodash.isNull(value)) { return false; } else { var re = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/g; //匹配IP地址的正则表达式 if (re.test(value)) { if ( RegExp.$1 < 256 && RegExp.$2 < 256 && RegExp.$3 < 256 && RegExp.$4 < 256 ) return true; } return false; } }; /** * 校验输入为字母,数字,下划线,减号,输入长度为4-16位 * @param {*} value */ jsUtils.isUserName = value => { return value && /^[a-zA-Z0-9_-]{4,16}$/.test(value); }; /** * 校验密码强度 * 最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符 * 如果有其他的常用需要,再添加 * @param {String}} value */ jsUtils.isPassword = value => { return ( value && /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/.test( value ) ); }; // module.exports = jsUtils;