UNPKG

vimo-dt

Version:

A Vue2.x UI Project For Mobile & HyBrid

203 lines (199 loc) 6.47 kB
/** * 常用正则 * */ export default { // 整数(包含正负) integer: { type: 'number', regexp: /^-?[1-9]\d*$/ }, // 正整数 positiveInteger: { type: 'number', regexp: /^[1-9]\d*$/ }, // 负整数 negativeInteger: { type: 'number', regexp: /^-[1-9]\d*$/ }, // 邮箱 email: { type: 'email', regexp: /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/ }, // IP地址 ip: { type: 'number', regexp: /(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)/ }, // 身份证 text idCard: { type: 'text', regexp (num) { if (!num) return false num = num.toUpperCase() const cityCode = { 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: '国外 ' } if (!cityCode[num.substr(0, 2)]) { if (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test') { console.log('地址编码错误') } return false } // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。 if (!/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num)) { if (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test') { console.log('输入的身份证号长度不对,或者号码不符合规定!\n15位号码应全为数字,18位号码末位可以为数字或X。') } return false } // 校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。 // 下面分别分析出生日期和校验位 var re, len, arrSplit, dtmBirth, bGoodDay, arrInt, arrCh, nTemp, k len = num.length /* istanbul ignore if */ if (len === 15) { re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/) arrSplit = num.match(re) // 检查生日日期是否正确 dtmBirth = new Date( '19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4] ) bGoodDay = dtmBirth.getYear() === Number(arrSplit[2]) && dtmBirth.getMonth() + 1 === Number(arrSplit[3]) && dtmBirth.getDate() === Number(arrSplit[4]) if (!bGoodDay) { if (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test') { console.log('输入的身份证号里出生日期不对!') } return false } else { // 将15位身份证转成18位 // 校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。 arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'] nTemp = 0 num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6) for (k = 0; k < 17; k++) { nTemp += num.substr(k, 1) * arrInt[k] } num += arrCh[nTemp % 11] return true } } if (len === 18) { re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/) arrSplit = num.match(re) // 检查生日日期是否正确 dtmBirth = new Date(arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]) bGoodDay = dtmBirth.getFullYear() === Number(arrSplit[2]) && dtmBirth.getMonth() + 1 === Number(arrSplit[3]) && dtmBirth.getDate() === Number(arrSplit[4]) if (!bGoodDay) { if (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test') { console.log('输入的身份证号里出生日期不对!') } return false } else { // 检验18位身份证的校验码是否正确。 // 校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。 var valnum arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'] nTemp = 0 for (k = 0; k < 17; k++) { nTemp += num.substr(k, 1) * arrInt[k] } valnum = arrCh[nTemp % 11] if (valnum !== num.substr(17, 1)) { if (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test') { console.log('18位身份证的校验码不正确!应该为:' + num.substr(17, 1) + '->' + valnum) } return false } return true } } /* istanbul ignore next */ return false } }, // 密码需6-18位,以字母开头可含数字 password: { type: 'password', regexp: /^[a-zA-Z]\w{5,17}$/ }, // 国内电话, 正确格式为:XXXX-XXXXXXX,XXXX- XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX。 tel: { type: 'tel', regexp: /^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$/ }, // 国内手机号, 13/14/15/18/17开头 mobile: { type: 'tel', regexp: /^((13[0-9])|(14[0-9])|(15[0-9])|(18[0-9])|(17[0-9]))\d{8}$/ }, // 验证汉字 cn: { type: 'text', regexp: /[\u4e00-\u9fa5]/ }, // 验证码, 至少4位 securityCode: { type: 'number', regexp: /^\d{4,}$/ }, // 昵称: 可由中英文字母、数字、"-"、"_"组成。 nickName: { type: 'text', regexp: /[A-Za-z0-9_\-\u4e00-\u9fa5]+/ }, // qq: 1-9开头,最少5位。 qq: { type: 'number', regexp: /^[1-9][0-9]{4,}$/ }, // 网址URL, 必须以(https|http|ftp|rtsp|mms)开头 url: { type: 'url', regexp: /^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+/ } }