From 8d253101b2545a2a994bdad43093d12260362a6e Mon Sep 17 00:00:00 2001 From: java110 <928255095@qq.com> Date: Sun, 22 Mar 2020 12:41:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E6=A0=A1=E9=AA=8C=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/vcCore/vcFramework.js | 315 +++++++++++++++++++++++++++++++++++ 1 file changed, 315 insertions(+) diff --git a/public/vcCore/vcFramework.js b/public/vcCore/vcFramework.js index 306591ecd..f2df8b303 100644 --- a/public/vcCore/vcFramework.js +++ b/public/vcCore/vcFramework.js @@ -1472,5 +1472,320 @@ }, false); })(window.vcFramework); +/** +vc 校验 工具类 -method +(1)、required:true 必输字段 +(2)、remote:"remote-valid.jsp" 使用ajax方法调用remote-valid.jsp验证输入值 +(3)、email:true 必须输入正确格式的电子邮件 +(4)、url:true 必须输入正确格式的网址 +(5)、date:true 必须输入正确格式的日期,日期校验ie6出错,慎用 +(6)、dateISO:true 必须输入正确格式的日期(ISO),例如:2009-06-23,1998/01/22 只验证格式,不验证有效性 +(7)、number:true 必须输入合法的数字(负数,小数) +(8)、digits:true 必须输入整数 +(9)、creditcard:true 必须输入合法的信用卡号 +(10)、equalTo:"#password" 输入值必须和#password相同 +(11)、accept: 输入拥有合法后缀名的字符串(上传文件的后缀) +(12)、maxlength:5 输入长度最多是5的字符串(汉字算一个字符) +(13)、minlength:10 输入长度最小是10的字符串(汉字算一个字符) +(14)、rangelength:[5,10] 输入长度必须介于 5 和 10 之间的字符串")(汉字算一个字符) +(15)、range:[5,10] 输入值必须介于 5 和 10 之间 +(16)、max:5 输入值不能大于5 +(17)、min:10 输入值不能小于10 +**/ +(function(vcFramework){ + var validate = { + + state:true, + errInfo:'', + + setState:function(_state,_errInfo){ + this.state = _state; + if(!this.state){ + this.errInfo = _errInfo + throw "校验失败:"+_errInfo; + } + }, + + /** + 校验手机号 + **/ + phone:function(text){ + var regPhone =/^0?1[3|4|5|6|7|8][0-9]\d{8}$/; + return regPhone.test(text); + }, + /** + 校验邮箱 + **/ + email:function(text){ + var regEmail = new RegExp("^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$"); //正则表达式 + return regEmail.test(text); + }, + /** + * 必填 + * @param {参数} text + */ + required:function(text){ + if(text == undefined || text == null || text == "" ){ + return false; + } + + return true; + }, + /** + * 校验长度 + * @param {校验文本} text + * @param {最小长度} minLength + * @param {最大长度} maxLength + */ + maxin:function(text,minLength,maxLength){ + if(text.length maxLength){ + return false; + } + + return true; + }, + /** + * 校验长度 + * @param {校验文本} text + * @param {最大长度} maxLength + */ + maxLength:function(text,maxLength){ + if(text.length > maxLength){ + return false; + } + + return true; + }, + /** + * 校验最小长度 + * @param {校验文本} text + * @param {最小长度} minLength + */ + minLength:function(text,minLength){ + if(text.length < minLength){ + return false; + } + return true; + }, + /** + * 全是数字 + * @param {校验文本} text + */ + num:function(text){ + var regNum = /^[0-9][0-9]*$/; + return regNum.test(text); + }, + date:function(str) { + var regDate = /^(\d{4})-(\d{2})-(\d{2})$/; + return regDate.test(str); + }, + dateTime:function(str){ + var reDateTime = /^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\s+(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/; + return reDateTime.test(str); + }, + /** + 金额校验 + **/ + money:function(text){ + var regMoney = /^\d+\.?\d{0,2}$/; + return regMoney.test(text); + }, + idCard:function(num){ + num = num.toUpperCase(); + //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。 + if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) { + return false; + } + //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。 + //下面分别分析出生日期和校验位 + var len, re; + len = num.length; + if (len == 15) { + re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/); + var arrSplit = num.match(re); + + //检查生日日期是否正确 + var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]); + var bGoodDay; + bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4])); + if (!bGoodDay) { + return false; + } + else { + //将15位身份证转成18位 + //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。 + var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); + var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); + var nTemp = 0, i; + num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6); + for (i = 0; i < 17; i++) { + nTemp += num.substr(i, 1) * arrInt[i]; + } + 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)$/); + var arrSplit = num.match(re); + + //检查生日日期是否正确 + var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]); + var bGoodDay; + bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4])); + if (!bGoodDay) { + // alert(dtmBirth.getYear()); + // alert(arrSplit[2]); + return false; + } + else { + //检验18位身份证的校验码是否正确。 + //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。 + var valnum; + var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); + var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); + var nTemp = 0, i; + for (i = 0; i < 17; i++) { + nTemp += num.substr(i, 1) * arrInt[i]; + } + valnum = arrCh[nTemp % 11]; + if (valnum != num.substr(17, 1)) { + return false; + } + return true; + } + } + return false; + } + + }; + vc.validate = validate; + +})(window.vcFramework); + +/** + * 校验 -core + */ +(function(validate){ + + /** + * 根据配置校验 + * + * eg: + * dataObj: + * { + * name:"wuxw", + * age:"19", + * emailInfo:{ + * email:"928255095@qq.com" + * } + * } + * + * dataConfig: + * { + * "name":[ + { + limit:"required", + param:"", + errInfo:'用户名为必填' + }, + { + limit:"maxin", + param:"1,10", + errInfo:'用户名必须为1到10个字之间' + }] + * } + * + */ + validate.validate = function(dataObj,dataConfig){ + + try{ + // 循环配置(每个字段) + for(var key in dataConfig){ + //配置信息 + var tmpDataConfigValue = dataConfig[key]; + //对key进行处理 + var keys = key.split("."); + console.log("keys :",keys); + var tmpDataObj = dataObj; + //根据配置获取 数据值 + keys.forEach(function(tmpKey){ + console.log('tmpDataObj:',tmpDataObj); + tmpDataObj = tmpDataObj[tmpKey] + }); +// for(var tmpKey in keys){ +// console.log('tmpDataObj:',tmpDataObj); +// tmpDataObj = tmpDataObj[tmpKey] +// } + + tmpDataConfigValue.forEach(function(configObj){ + if(configObj.limit == "required"){ + validate.setState(validate.required(tmpDataObj),configObj.errInfo); + } + + if(configObj.limit == 'phone'){ + validate.setState(validate.phone(tmpDataObj),configObj.errInfo); + } + + if(configObj.limit == 'email'){ + validate.setState(validate.email(tmpDataObj),configObj.errInfo); + } + + if(configObj.limit == 'maxin'){ + var tmpParam = configObj.param.split(",") + validate.setState(validate.maxin(tmpDataObj,tmpParam[0],tmpParam[1]),configObj.errInfo); + } + + if(configObj.limit == 'maxLength'){ + validate.setState(validate.maxLength(tmpDataObj,configObj.param),configObj.errInfo); + + } + + if(configObj.limit == 'minLength'){ + validate.setState(validate.minLength(tmpDataObj,configObj.param),configObj.errInfo); +7 + } + + if(configObj.limit == 'num'){ + validate.setState(validate.num(tmpDataObj),configObj.errInfo); + } + + if(configObj.limit == 'date'){ + validate.setState(validate.date(tmpDataObj),configObj.errInfo); + } + if(configObj.limit == 'dateTime'){ + validate.setState(validate.dateTime(tmpDataObj),configObj.errInfo); + } + + if(configObj.limit == 'money'){ + validate.setState(validate.money(tmpDataObj),configObj.errInfo); + } + + if(configObj.limit == 'idCard'){ + validate.setState(validate.idCard(tmpDataObj),configObj.errInfo); + } + }); + + } + }catch(error){ + console.log("数据校验失败",validate.state,validate.errInfo,error); + return false; + } + + return true; + } + +})(window.vcFramework.validate); + + +/** +对 validate 进行二次封装 +**/ +(function(vcFramework){ + vcFramework.check = function(dataObj,dataConfig){ + return vcFramework.validate.validate(dataObj, dataConfig); + } +})(window.vcFramework) +