闸门智控小程序
This commit is contained in:
@@ -0,0 +1,268 @@
|
||||
/**
|
||||
* 表单验证
|
||||
* @author echo.
|
||||
* @version 1.5.0
|
||||
**/
|
||||
|
||||
const form = {
|
||||
//非必填情况下,如果值为空,则不进行校验
|
||||
//当出现错误时返回错误消息,否则返回空即为验证通过
|
||||
/*
|
||||
formData:Object 表单对象。{key:value,key:value},key==rules.name
|
||||
rules: Array [{name:name,rule:[],msg:[]},{name:name,rule:[],msg:[]}]
|
||||
name:name 属性=> 元素的名称
|
||||
rule:字符串数组 ["required","isMobile","isEmail","isCarNo","isIdCard","isAmount","isNum","isChinese","isEnglish",isEnAndNo","isSpecial","isEmoji",""isDate","isUrl","isSame:key","range:[1,9]","minLength:9","maxLength:Number"]
|
||||
msg:数组 []。 与数组 rule 长度相同,对应的错误提示信息
|
||||
*/
|
||||
validation: function(formData, rules) {
|
||||
for (let item of rules) {
|
||||
let key = item.name;
|
||||
let rule = item.rule;
|
||||
let msgArr = item.msg;
|
||||
if (!key || !rule || rule.length === 0 || !msgArr || msgArr.length === 0) {
|
||||
continue;
|
||||
}
|
||||
for (let i = 0, length = rule.length; i < length; i++) {
|
||||
let ruleItem = rule[i];
|
||||
let msg = msgArr[i];
|
||||
if (!ruleItem || !msg || (!~rule.indexOf("required") && formData[key].toString().length === 0)) {
|
||||
continue;
|
||||
}
|
||||
//数据处理
|
||||
let value = null;
|
||||
if (~ruleItem.indexOf(":")) {
|
||||
let temp = ruleItem.split(":");
|
||||
ruleItem = temp[0];
|
||||
value = temp[1];
|
||||
}
|
||||
let isError = false;
|
||||
switch (ruleItem) {
|
||||
case "required":
|
||||
isError = form._isNullOrEmpty(formData[key]);
|
||||
break;
|
||||
case "isMobile":
|
||||
isError = !form._isMobile(formData[key]);
|
||||
break;
|
||||
case "isEmail":
|
||||
isError = !form._isEmail(formData[key]);
|
||||
break;
|
||||
case "isCarNo":
|
||||
isError = !form._isCarNo(formData[key]);
|
||||
break;
|
||||
case "isIdCard":
|
||||
isError = !form._isIdCard(formData[key]);
|
||||
break;
|
||||
case "isAmount":
|
||||
isError = !form._isAmount(formData[key]);
|
||||
break;
|
||||
case "isNum":
|
||||
isError = !form._isNum(formData[key]);
|
||||
break;
|
||||
case "isChinese":
|
||||
isError = !form._isChinese(formData[key]);
|
||||
break;
|
||||
case "isEnglish":
|
||||
isError = !form._isEnglish(formData[key]);
|
||||
break;
|
||||
case "isEnAndNo":
|
||||
isError = !form._isEnAndNo(formData[key]);
|
||||
break;
|
||||
case "isEnOrNo":
|
||||
isError = !form._isEnOrNo(formData[key]);
|
||||
break;
|
||||
case "isSpecial":
|
||||
isError = form._isSpecial(formData[key]);
|
||||
break;
|
||||
case "isEmoji":
|
||||
isError = form._isEmoji(formData[key]);
|
||||
break;
|
||||
case "isDate":
|
||||
isError = !form._isDate(formData[key]);
|
||||
break;
|
||||
case "isUrl":
|
||||
isError = !form._isUrl(formData[key]);
|
||||
break;
|
||||
case "isSame":
|
||||
isError = !form._isSame(formData[key], formData[value]);
|
||||
break;
|
||||
case "range":
|
||||
let range = null;
|
||||
try {
|
||||
range = JSON.parse(value);
|
||||
if (range.length <= 1) {
|
||||
throw new Error("range值传入有误!")
|
||||
}
|
||||
} catch (e) {
|
||||
return "range值传入有误!"
|
||||
}
|
||||
isError = !form._isRange(formData[key], range[0], range[1])
|
||||
break;
|
||||
case "minLength":
|
||||
isError = !form._minLength(formData[key], value)
|
||||
break;
|
||||
case "maxLength":
|
||||
isError = !form._maxLength(formData[key], value)
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (isError) {
|
||||
return msg;
|
||||
}
|
||||
}
|
||||
}
|
||||
return "";
|
||||
},
|
||||
_isNullOrEmpty: function(value) {
|
||||
return (value === null || value === '' || value === undefined) ? true : false;
|
||||
},
|
||||
_isMobile: function(value) {
|
||||
return /^(?:13\d|14\d|15\d|16\d|17\d|18\d|19\d)\d{5}(\d{3}|\*{3})$/.test(value);
|
||||
},
|
||||
_isEmail: function(value) {
|
||||
return /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/.test(value);
|
||||
},
|
||||
_isCarNo: function(value) {
|
||||
// 新能源车牌
|
||||
const xreg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/;
|
||||
// 旧车牌
|
||||
const creg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/;
|
||||
if (value.length === 7) {
|
||||
return creg.test(value);
|
||||
} else if (value.length === 8) {
|
||||
return xreg.test(value);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
_isIdCard: function(value) {
|
||||
let idCard = value;
|
||||
if (idCard.length == 15) {
|
||||
return this.__isValidityBrithBy15IdCard;
|
||||
} else if (idCard.length == 18) {
|
||||
let arrIdCard = idCard.split("");
|
||||
if (this.__isValidityBrithBy18IdCard(idCard) && this.__isTrueValidateCodeBy18IdCard(arrIdCard)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
__isTrueValidateCodeBy18IdCard: function(arrIdCard) {
|
||||
let sum = 0;
|
||||
let Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1];
|
||||
let ValideCode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2];
|
||||
if (arrIdCard[17].toLowerCase() == 'x') {
|
||||
arrIdCard[17] = 10;
|
||||
}
|
||||
for (let i = 0; i < 17; i++) {
|
||||
sum += Wi[i] * arrIdCard[i];
|
||||
}
|
||||
let valCodePosition = sum % 11;
|
||||
if (arrIdCard[17] == ValideCode[valCodePosition]) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
__isValidityBrithBy18IdCard: function(idCard18) {
|
||||
let year = idCard18.substring(6, 10);
|
||||
let month = idCard18.substring(10, 12);
|
||||
let day = idCard18.substring(12, 14);
|
||||
let temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
|
||||
if (temp_date.getFullYear() != parseFloat(year) || temp_date.getMonth() != parseFloat(month) - 1 || temp_date.getDate() !=
|
||||
parseFloat(day)) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
},
|
||||
__isValidityBrithBy15IdCard: function(idCard15) {
|
||||
let year = idCard15.substring(6, 8);
|
||||
let month = idCard15.substring(8, 10);
|
||||
let day = idCard15.substring(10, 12);
|
||||
let temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
|
||||
|
||||
if (temp_date.getYear() != parseFloat(year) || temp_date.getMonth() != parseFloat(month) - 1 || temp_date.getDate() !=
|
||||
parseFloat(day)) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
},
|
||||
_isAmount: function(value) {
|
||||
//金额,只允许保留两位小数
|
||||
return /^([0-9]*[.]?[0-9])[0-9]{0,1}$/.test(value);
|
||||
},
|
||||
_isNum: function(value) {
|
||||
//只能为数字
|
||||
return /^[0-9]+$/.test(value);
|
||||
},
|
||||
_isChinese: function(value) {
|
||||
let reg = /.*[\u4e00-\u9fa5]+.*$/;
|
||||
return value !== "" && reg.test(value) && !form._isSpecial(value) && !form._isEmoji(value)
|
||||
},
|
||||
_isEnglish: function(value) {
|
||||
return /^[a-zA-Z]*$/.test(value)
|
||||
},
|
||||
_isEnAndNo: function(value) {
|
||||
//8~20位数字和字母组合
|
||||
return /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,20}$/.test(value);
|
||||
},
|
||||
_isEnOrNo: function(value) {
|
||||
//英文或者数字
|
||||
let reg = /.*[\u4e00-\u9fa5]+.*$/;
|
||||
let result = true;
|
||||
if (reg.test(value) || form._isSpecial(value) || form._isEmoji(value)) {
|
||||
result = false
|
||||
}
|
||||
return result
|
||||
},
|
||||
_isSpecial: function(value) {
|
||||
//是否包含特殊字符
|
||||
let regEn = /[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/im,
|
||||
regCn = /[·!#¥(——):;“”‘、,|《。》?、【】[\]]/im;
|
||||
if (regEn.test(value) || regCn.test(value)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
_isEmoji: function(value) {
|
||||
//是否包含表情
|
||||
return /\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g.test(value);
|
||||
},
|
||||
_isDate: function(value) {
|
||||
//2019-10-12
|
||||
const reg =
|
||||
/^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/;
|
||||
return reg.test(value);
|
||||
},
|
||||
_isUrl: function(value) {
|
||||
return /^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/.test(value);
|
||||
},
|
||||
_isSame: function(value1, value2) {
|
||||
return value1 === value2
|
||||
},
|
||||
_isRange: function(value, range1, range2) {
|
||||
if ((!range1 && range1 != 0) && (!range2 && range2 != 0)) {
|
||||
return true;
|
||||
} else if (!range1 && range1 != 0) {
|
||||
return value <= range2
|
||||
} else if (!range2 && range2 != 0) {
|
||||
return value >= range1
|
||||
} else {
|
||||
return value >= range1 && value <= range2
|
||||
}
|
||||
},
|
||||
_minLength: function(value, min) {
|
||||
return value.length >= Number(min)
|
||||
},
|
||||
_maxLength: function(value, max) {
|
||||
return value.length <= Number(max)
|
||||
}
|
||||
};
|
||||
module.exports = {
|
||||
validation: form.validation
|
||||
};
|
||||
@@ -0,0 +1 @@
|
||||
const form={validation:function(a,b){for(let c of b){let b=c.name,d=c.rule,e=c.msg;if(b&&d&&0!==d.length&&e&&0!==e.length)for(let c=0,f=d.length;c<f;c++){let f=d[c],g=e[c];if(!f||!g||!~d.indexOf("required")&&0===a[b].toString().length)continue;let h=null;if(~f.indexOf(":")){let a=f.split(":");f=a[0],h=a[1]}let i=!1;switch(f){case"required":i=form._isNullOrEmpty(a[b]);break;case"isMobile":i=!form._isMobile(a[b]);break;case"isEmail":i=!form._isEmail(a[b]);break;case"isCarNo":i=!form._isCarNo(a[b]);break;case"isIdCard":i=!form._isIdCard(a[b]);break;case"isAmount":i=!form._isAmount(a[b]);break;case"isNum":i=!form._isNum(a[b]);break;case"isChinese":i=!form._isChinese(a[b]);break;case"isEnglish":i=!form._isEnglish(a[b]);break;case"isEnAndNo":i=!form._isEnAndNo(a[b]);break;case"isEnOrNo":i=!form._isEnOrNo(a[b]);break;case"isSpecial":i=form._isSpecial(a[b]);break;case"isEmoji":i=form._isEmoji(a[b]);break;case"isDate":i=!form._isDate(a[b]);break;case"isUrl":i=!form._isUrl(a[b]);break;case"isSame":i=!form._isSame(a[b],a[h]);break;case"range":let c=null;try{if(c=JSON.parse(h),1>=c.length)throw new Error("range\u503C\u4F20\u5165\u6709\u8BEF\uFF01")}catch(a){return"range\u503C\u4F20\u5165\u6709\u8BEF\uFF01"}i=!form._isRange(a[b],c[0],c[1]);break;case"minLength":i=!form._minLength(a[b],h);break;case"maxLength":i=!form._maxLength(a[b],h);break;default:}if(i)return g}}return""},_isNullOrEmpty:function(a){return!(null!==a&&""!==a&&a!==void 0)},_isMobile:function(a){return /^(?:13\d|14\d|15\d|16\d|17\d|18\d|19\d)\d{5}(\d{3}|\*{3})$/.test(a)},_isEmail:function(a){return /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/.test(a)},_isCarNo:function(a){const b=/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/,c=/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/;return 7===a.length?c.test(a):8===a.length&&b.test(a)},_isIdCard:function(a){let b=a;if(15==b.length)return this.__isValidityBrithBy15IdCard;if(18==b.length){let a=b.split("");return!!(this.__isValidityBrithBy18IdCard(b)&&this.__isTrueValidateCodeBy18IdCard(a))}return!1},__isTrueValidateCodeBy18IdCard:function(a){let b=0,c=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1];"x"==a[17].toLowerCase()&&(a[17]=10);for(let d=0;17>d;d++)b+=c[d]*a[d];let d=b%11;return!(a[17]!=[1,0,10,9,8,7,6,5,4,3,2][d])},__isValidityBrithBy18IdCard:function(a){let b=a.substring(6,10),c=a.substring(10,12),d=a.substring(12,14),e=new Date(b,parseFloat(c)-1,parseFloat(d));return e.getFullYear()==parseFloat(b)&&e.getMonth()==parseFloat(c)-1&&e.getDate()==parseFloat(d)},__isValidityBrithBy15IdCard:function(a){let b=a.substring(6,8),c=a.substring(8,10),d=a.substring(10,12),e=new Date(b,parseFloat(c)-1,parseFloat(d));return e.getYear()==parseFloat(b)&&e.getMonth()==parseFloat(c)-1&&e.getDate()==parseFloat(d)},_isAmount:function(a){return /^([0-9]*[.]?[0-9])[0-9]{0,1}$/.test(a)},_isNum:function(a){return /^[0-9]+$/.test(a)},_isChinese:function(a){let b=/.*[\u4e00-\u9fa5]+.*$/;return""!==a&&b.test(a)&&!form._isSpecial(a)&&!form._isEmoji(a)},_isEnglish:function(a){return /^[a-zA-Z]*$/.test(a)},_isEnAndNo:function(a){return /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,20}$/.test(a)},_isEnOrNo:function(a){let b=/.*[\u4e00-\u9fa5]+.*$/,c=!0;return(b.test(a)||form._isSpecial(a)||form._isEmoji(a))&&(c=!1),c},_isSpecial:function(a){let b=/[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/im,c=/[·!#¥(——):;“”‘、,|《。》?、【】[\]]/im;return!!(b.test(a)||c.test(a))},_isEmoji:function(a){return /\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g.test(a)},_isDate:function(a){const b=/^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/;return b.test(a)},_isUrl:function(a){return /^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/.test(a)},_isSame:function(a,b){return a===b},_isRange:function(a,b,c){return!(b||0==b||c||0==c)||(b||0==b?c||0==c?a>=b&&a<=c:a>=b:a<=c)},_minLength:function(a,b){return a.length>=+b},_maxLength:function(a,b){return a.length<=+b}};module.exports={validation:form.validation};
|
||||
Reference in New Issue
Block a user