MicroCommunityWeb/public/vcCore/vc-validate.js
2021-11-16 21:08:47 +08:00

314 lines
11 KiB
JavaScript
Executable File
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.

/**
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-231998/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 <minLength || 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)