110 lines
4.1 KiB
JavaScript
110 lines
4.1 KiB
JavaScript
const validate = (value, vtype,lgh) => {
|
||
// 自定义正则校验
|
||
if ('regular' === vtype) {
|
||
return lgh.test(value);
|
||
}
|
||
//长度校验
|
||
if(vtype === 'length'){
|
||
let val = lgh.split(',')
|
||
let len = value.length
|
||
if (val.length == 1){
|
||
return val == len
|
||
} else {
|
||
return len >= val[0] && len <= val[1]
|
||
}
|
||
}
|
||
if ('require' === vtype) {
|
||
return !!value;
|
||
}
|
||
if ('phone' === vtype) {
|
||
return /^1[3-9]\d{9}$/.test(value);
|
||
}
|
||
// 验证码
|
||
if ('captcha' === vtype) {
|
||
return /^[0-9]{4,6}$/.test(value);
|
||
}
|
||
// 不知道干啥的
|
||
if ('isnumber' === vtype) {
|
||
return /^[0-9]{5,11}$/.test(value);
|
||
}
|
||
if ('isqq' === vtype) {
|
||
return /^[1-9][0-9]{4,10}$/.test(value);
|
||
}
|
||
// 身份证号码验证不准确
|
||
if ('idcard' === vtype) {
|
||
return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(value);
|
||
}
|
||
if ('password' === vtype) {
|
||
return /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9a-zA-Z]{6,12}$/.test(value);
|
||
}
|
||
// 邀请码验证
|
||
if ('invitecode' === vtype) {
|
||
return /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9a-zA-Z]$/.test(value);
|
||
}
|
||
// 判断不准确 比如123.
|
||
if ('ismoney' === vtype) {
|
||
return /^(([1-9]\d*)|\d)(\.\d{1,2})?$/.test(value);
|
||
}
|
||
if ('email' === vtype) {
|
||
// return /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(value);
|
||
return /^[0-9a-zA-Z_.-]+[@][0-9a-zA-Z_.-]+([.][a-zA-Z]+){1,2}$/.test(value);
|
||
}
|
||
if ('url' === vtype) {
|
||
return /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i.test(value);
|
||
}
|
||
if ('paragraph' === vtype) {
|
||
return /^[A-Z0-9]{18}$/.test(value);
|
||
}
|
||
// 银行卡验证
|
||
if ('card' === vtype) {
|
||
let bankno = value;
|
||
let lastNum = bankno.substr(bankno.length - 1, 1); //取出最后一位(与luhm进行比较)
|
||
let first15Num = bankno.substr(0, bankno.length - 1); //前15或18位
|
||
let newArr = [];
|
||
|
||
// 前15或18位倒序存进数组
|
||
for (let i = first15Num.length - 1; i > -1; i--) newArr.push(first15Num.substr(i, 1));
|
||
|
||
let arrJiShu = []; // 奇数位*2的积 <9
|
||
let arrJiShu2 = []; // 奇数位*2的积 >9
|
||
let arrOuShu = []; // 偶数位数组
|
||
for (let j = 0; j < newArr.length; j++) {
|
||
if ((j + 1) % 2 == 1) { //奇数位
|
||
if (parseInt(newArr[j]) * 2 < 9) arrJiShu.push(parseInt(newArr[j]) * 2);
|
||
else arrJiShu2.push(parseInt(newArr[j]) * 2);
|
||
} else arrOuShu.push(newArr[j]); // 偶数位
|
||
}
|
||
|
||
let jishu_child1 = []; //奇数位*2 >9 的分割之后的数组个位数
|
||
let jishu_child2 = []; //奇数位*2 >9 的分割之后的数组十位数
|
||
for (let h = 0; h < arrJiShu2.length; h++) {
|
||
jishu_child1.push(parseInt(arrJiShu2[h]) % 10);
|
||
jishu_child2.push(parseInt(arrJiShu2[h]) / 10);
|
||
}
|
||
|
||
let sumJiShu = 0; //奇数位*2 < 9 的数组之和
|
||
let sumOuShu = 0; //偶数位数组之和
|
||
let sumJiShuChild1 = 0; //奇数位*2 >9 的分割之后的数组个位数之和
|
||
let sumJiShuChild2 = 0; //奇数位*2 >9 的分割之后的数组十位数之和
|
||
let sumTotal = 0;
|
||
|
||
for (let m = 0; m < arrJiShu.length; m++) sumJiShu = sumJiShu + parseInt(arrJiShu[m]);
|
||
for (let n = 0; n < arrOuShu.length; n++) sumOuShu = sumOuShu + parseInt(arrOuShu[n]);
|
||
|
||
for (let p = 0; p < jishu_child1.length; p++) {
|
||
sumJiShuChild1 = sumJiShuChild1 + parseInt(jishu_child1[p]);
|
||
sumJiShuChild2 = sumJiShuChild2 + parseInt(jishu_child2[p]);
|
||
}
|
||
//计算总和
|
||
sumTotal = parseInt(sumJiShu) + parseInt(sumOuShu) + parseInt(sumJiShuChild1) + parseInt(sumJiShuChild2);
|
||
//计算Luhm值
|
||
let k = parseInt(sumTotal) % 10 == 0 ? 10 : parseInt(sumTotal) % 10;
|
||
let luhm = 10 - k;
|
||
return lastNum == luhm;
|
||
}
|
||
}
|
||
|
||
export {
|
||
validate
|
||
};
|