/** 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(vc){ 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.vc); /** * 校验 -core */ (function(validate){ /** * 根据配置校验 * * eg: * dataObj: * { * name:"Kevin", * age:"19", * emailInfo:{ * email:"58957118@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.vc.validate); /** 对 validate 进行二次封装 **/ (function(vc){ vc.check = function(dataObj,dataConfig){ return vc.validate.validate(dataObj, dataConfig); } })(window.vc)