Files
2025-04-30 14:04:34 +08:00

110 lines
4.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
};