对easyui-validatebox的验证类型的扩展--补充
阅读原文时间:2023年07月09日阅读:2

一.说明

  这篇文章是《对easyui-validatebox的验证类型的扩展》的补充。在工程的持续开发中,我们又对此进行了更多的补充。

二.补充代码

  增加了更多的验证类型。

/*
* 比较两个日期的大小
* 传入的参数推荐是"yyyy-mm-dd"的格式,其他的日期格式也可以,但要保证一致
*/
var dateCompare = function(date1, date2){
if(date1 && date2){
var a = new Date(date1);
var b = new Date(date2);
return a < b;
}
};
/*
* @author : Hill
* @desc: 比较两个时间的大小(传入的参数是"HH:mm"的格式,)
* @param: time1:目标时间;time2:被比较时间
*/
var timeCompare = function(time1, time2){
//console.info(time1+"-"+time2);
try {
if(time1 && time2){
var t1=parseInt(time1.split(":")[0]*60)+parseInt(time1.split(":")[1]);
var t2=parseInt(time2.split(":")[0]*60)+parseInt(time2.split(":")[1]);
return t1 < t2;
}
return false;
} catch (e) {
return false;
}
};
/*
* @author : Hill
* @desc: 比较两个时间的大小,支持的格式可在formatArr扩展
* @param: datetime1:目标时间;datetime2:被比较时间
*/
var dateTimeCompare = function(datetime1, datetime2){

var formatArr=new Array('YYYY-MM-DD',  
        'YYYY-MM-DD HH:mm',  
        'YYYY-MM-DD HH:mm:ss'  
        );//支持的格式  
try {  
    if(datetime1 && datetime2){  
        var dt1=moment(datetime1,formatArr);  
        var dt2=moment(datetime2,formatArr);  

// console.info(dt1+","+dt2);
return dt1<dt2;
}
return false;
} catch (e) {
return false;
}
};

/*
* 对easyui-validatebox的验证类型的扩展
*/
$.extend($.fn.validatebox.defaults.rules, {
//手机号码
mobile: {
validator: function(value, param){
return /^0{0,1}1[3,8,5][0-9]{9}$/.test(value);
},
message: "手机号码格式不正确"
},
//select空值验证
selectNotNull: {
validator: function(value, param){
//console.info(value);
return $(param[0]).find("option:contains('"+value+"')").val() != '';
//return value!='';
},
message: "请选择"
},
//正整数
pnum: {
validator: function(value, param){
return /^[0-9]*[1-9][0-9]*$/.test(value);
},
message: "请输入正整数"
},
//非0开头正整数
pznum: {
validator: function(value, param){
return /^[1-9]*[1-9][0-9]*$/.test(value);
},
message: "请输入非0开头的正整数"
},
//正实数,包含小数
num:{
validator: function(value, param){
return /^\d+(\.\d+)?$/.test(value);
},
message: "请输入正整数或者小数"
},
//2位正整数,或精确两位小数
numTwoOrPointTwo:{
validator: function(value, param){
return /^([1-9]\d?(\.\d{1,2})?|0\.\d{1,2}|0)$/.test(value);
},
message: "请输入1到2位的正整数或者精确到2位的小数"
},
//6位正整数,或精确两位小数
numSixOrPointTwo:{
validator: function(value, param){
return /^(([0-9]|([1-9][0-9]{0,5}))((\.[0-9]{1,2})?))$/.test(value);
},
message: "请输入1到6位的正整数或者精确到2位的小数"
},
//过滤特殊字符
filterSpecial:{
validator: function(value, param){

        //过滤空格  
        var flag = /\\s/.test(value);  
        //过滤特殊字符串  
        var pattern  = new RegExp("\[\`~!@#$^&\*()=|{}':;',\\\\\[\\\\\].<>/?~!@#¥……&\*()——|{}【】’‘《》;:”“'。,、?\]");  
        var specialFlag = pattern.test(value);  
            return !flag && !specialFlag;

    },  
    message: "非法字符,请重新输入"  
},

//身份证  
IDCard: {  
    validator: function(value, param){  
        //return /^\\d{15}(\\d{2}\[A-Za-z0-9\])?$/i.test(value);  
        var flag=checkIdcard(value);  
        return flag==true?true:false;  
    },  
    message: "请输入正确的身份证号码"  
},  
//比较日期选择器  
compareDate: {  
    validator: function(value, param){  
        return dateCompare($(param\[0\]).datebox("getValue"), value);  
    },  
    message: "结束日期不能小于或等于开始日期"  
},  
//比较时间选择器(时分秒)  
compareTime: {  
    validator: function(value, param){  
        return timeCompare($(param\[0\]).timespinner("getValue"), value);  
    },  
    message: "结束时间不能小于或等于开始时间"  
},  
//比较时间选择器(时分秒)  
compareDateTime: {  
    validator: function(value, param){  
        return dateTimeCompare($(param\[0\]).timespinner("getValue"), value);  
    },  
    message: "结束时间不能小于或等于开始时间"  
},  
// 验证是否包含空格和非法字符  
unnormal: {  
    validator: function (value) {  
        return /^\[a-zA-Z0-9\]/i.test(value);

    },  
    message: '输入值不能为空和包含其他非法字符'  
}

});
//校验身份证合法性
function checkIdcard(idcard){
var Errors=new Array(
"验证通过!",
"身份证号码位数不对!",
"身份证号码出生日期超出范围或含有非法字符!",
"身份证号码校验错误!",
"身份证地区非法!"
);
var area={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"};

    //var idcard=idcard;  
    var Y,JYM;  
    var S,M;  
    var idcard\_array = new Array();  
    idcard\_array     = idcard.split("");  
    //地区检验  
    if(area\[parseInt(idcard.substr(0,2))\]==null){  
        //alert(Errors\[4\]);  
        //setItemFocus(0, 0, "CertID");  
        return Errors\[4\];  
    }

    //身份号码位数及格式检验  
    switch(idcard.length){  
    case 15:  
        if((parseInt(idcard.substr(6,2))+1900) % 4 == 0 || ((parseInt(idcard.substr(6,2))+1900) % 100 == 0 && (parseInt(idcard.substr(6,2))+1900) % 4 == 0 )){  
            ereg=/^\[1-9\]\[0-9\]{5}\[0-9\]{2}((01|03|05|07|08|10|12)(0\[1-9\]|\[1-2\]\[0-9\]|3\[0-1\])|(04|06|09|11)(0\[1-9\]|\[1-2\]\[0-9\]|30)|02(0\[1-9\]|\[1-2\]\[0-9\]))\[0-9\]{3}$/;//测试出生日期的合法性  
        }else{  
            ereg=/^\[1-9\]\[0-9\]{5}\[0-9\]{2}((01|03|05|07|08|10|12)(0\[1-9\]|\[1-2\]\[0-9\]|3\[0-1\])|(04|06|09|11)(0\[1-9\]|\[1-2\]\[0-9\]|30)|02(0\[1-9\]|1\[0-9\]|2\[0-8\]))\[0-9\]{3}$/;//测试出生日期的合法性  
        } 

        if(ereg.test(idcard)){  
            //alert(Errors\[0\]);  
            //setItemFocus(0, 0, "CertID");  
            return true;

        }else{  
            //alert(Errors\[2\]);  
            //setItemFocus(0, 0, "CertID");  
            return Errors\[2\];  
        }  
        break;  
    case 18:  
        //18位身份号码检测  
        //出生日期的合法性检查  
        //闰年月日:((01|03|05|07|08|10|12)(0\[1-9\]|\[1-2\]\[0-9\]|3\[0-1\])|(04|06|09|11)(0\[1-9\]|\[1-2\]\[0-9\]|30)|02(0\[1-9\]|\[1-2\]\[0-9\]))  
        //平年月日:((01|03|05|07|08|10|12)(0\[1-9\]|\[1-2\]\[0-9\]|3\[0-1\])|(04|06|09|11)(0\[1-9\]|\[1-2\]\[0-9\]|30)|02(0\[1-9\]|1\[0-9\]|2\[0-8\]))  
        if ( parseInt(idcard.substr(6,4)) % 4 == 0 || (parseInt(idcard.substr(6,4)) % 100 == 0 && parseInt(idcard.substr(6,4))%4 == 0 )){  
            ereg=/^\[1-9\]\[0-9\]{5}(19|20)\[0-9\]{2}((01|03|05|07|08|10|12)(0\[1-9\]|\[1-2\]\[0-9\]|3\[0-1\])|(04|06|09|11)(0\[1-9\]|\[1-2\]\[0-9\]|30)|02(0\[1-9\]|\[1-2\]\[0-9\]))\[0-9\]{3}\[0-9Xx\]$/;//闰年出生日期的合法性正则表达式  
        }else{  
            ereg=/^\[1-9\]\[0-9\]{5}(19|20)\[0-9\]{2}((01|03|05|07|08|10|12)(0\[1-9\]|\[1-2\]\[0-9\]|3\[0-1\])|(04|06|09|11)(0\[1-9\]|\[1-2\]\[0-9\]|30)|02(0\[1-9\]|1\[0-9\]|2\[0-8\]))\[0-9\]{3}\[0-9Xx\]$/;//平年出生日期的合法性正则表达式  
        }  
        if(ereg.test(idcard)){//测试出生日期的合法性  
            //计算校验位  
            S  =  (parseInt(idcard\_array\[0\]) + parseInt(idcard\_array\[10\])) \* 7  
                + (parseInt(idcard\_array\[1\]) + parseInt(idcard\_array\[11\])) \* 9  
                + (parseInt(idcard\_array\[2\]) + parseInt(idcard\_array\[12\])) \* 10  
                + (parseInt(idcard\_array\[3\]) + parseInt(idcard\_array\[13\])) \* 5  
                + (parseInt(idcard\_array\[4\]) + parseInt(idcard\_array\[14\])) \* 8  
                + (parseInt(idcard\_array\[5\]) + parseInt(idcard\_array\[15\])) \* 4  
                + (parseInt(idcard\_array\[6\]) + parseInt(idcard\_array\[16\])) \* 2  
                +  parseInt(idcard\_array\[7\]) \* 1  
                +  parseInt(idcard\_array\[8\]) \* 6  
                +  parseInt(idcard\_array\[9\]) \* 3 ;  
            Y    = S % 11;  
            M    = "F";  
            JYM  = "10X98765432";  
            M    = JYM.substr(Y,1);//判断校验位  
            if(M == idcard\_array\[17\]){  
                return  true;  
                //Errors\[0\];        //检测ID的校验位  
            }else{  
                //alert(Errors\[3\]);  
                //setItemFocus(0, 0, "CertID");  
                return Errors\[3\];  
            }  
        }else{  
            //alert(Errors\[2\]);  
            //setItemFocus(0, 0, "CertID");  
            return Errors\[2\];  
        }  
        break;  
    default:  
        //alert(Errors\[1\]);  
        //setItemFocus(0, 0, "CertID");  
        return Errors\[1\];  
        break;  
    }  

}