easyUI表单校验扩展

来源:互联网 发布:义隆单片机c语言 编辑:程序博客网 时间:2024/05/29 11:58
/**
 * easyui-validatebox datatype扩展 create by smx
 */
$.extend($.fn.validatebox.defaults.rules, {
    equalTo: {
        validator: function (value, param) {
            return value == $(param[0]).val();
        },
        message: '两次输入的字符不一至'
    },
    idcard: {//身份证输入框
        validator: function (value, param) {
            return isCardID(value).flag;
        },
        message:"请输入正确的身份证号"
    },
    mobile: {//电话号码输入框
        validator: function (value, param) {
            return /^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$/.test(value);
        },
        message: '手机号码不正确'
    },
    number: {//数字输入框
        validator: function (value, param) {
            return /^\d+$/.test(value);
        },
        message: '请输入数字'
    },
    CHS: {//汉字输入框
        validator: function (value, param) {
            return /^[\u0391-\uFFE5]+$/.test(value);
        },
        message: '请输入汉字'
    },
    ZIP: {//邮编输入框
        validator: function (value, param) {
            return /^[1-9]\d{5}$/.test(value);
        },
        message: '邮政编码不正确'
    },
    QQ: {//qq输入框
        validator: function (value, param) {
            return /^[1-9]\d{4,10}$/.test(value);
        },
        message: 'QQ号码不正确'
    },
    loginName: {//登录名称输入框
        validator: function (value, param) {
            return /^[\u0391-\uFFE5\w]+$/.test(value);
        },
        message: '登录名称只允许汉字、英文字母、数字及下划线。'
    },
    isEmpty:{
        validator:function(value,param){
            return isEmpty(value);
        },
        message:"输入为空字符串"
    },
    isTelOrMobile:{
        validator: function(value,param){
            return isTelOrMobile(value).flag;
        },
        message:"请输入正确的联系方式"
    },
    isTelephone:{
    validator: function(value,param){
    return isTelephone(value).flag;
    },
    message:"请输入正确的电话号码"
    }
});




//私有方法=============================================================
/**判断是否为空或空字符串*/
function isNull(str) {
    return {flag:!isEmpty(str), errorMsg:"您的输入为空,请重新输入"};
}
/**判断是否为空或空字符串(供内部方法调用)*/
function isEmpty(str) {
    return (str == null) || (str.trim().length == 0);
}
/**判断是否为字符*/
function isLetter(str) {
    if(isEmpty(str)){
        return {flag:true,errorMsg:""};
    }
    var reg = /^[\w]+$/;
    return {flag:reg.test(str),errorMsg:"字符"};
}
/**判断是否为字符或数字*/
function isLetterAndNumber(str) {
    if(isEmpty(str)){
        return {flag:true,errorMsg:""};
    }
    var reg = /^[\w\d]+$/;
    return {flag:reg.test(str),errorMsg:"数字或字符"};
}
/**判断是否为整数*/
function isInteger(str) {
    if(isEmpty(str)){
        return {flag:true,errorMsg:""};
    }
    var reg = /^(\-?)(\d+)(\.0+)?$/;
    return {flag:reg.test(str),errorMsg:"整数"};
}


/**判断是否为正整数*/
function isPositiveInteger(str) {
    if(isEmpty(str)){
        return {flag:true,errorMsg:""};
    }
    var reg = /^[1-9](\d*)(\.0+)?$/;
    return {flag:reg.test(str),errorMsg:"正整数"};
}


/**判断是否为非负整数*/
function isNotNegativeInteger(str) {
    if(isEmpty(str)){
        return {flag:true,errorMsg:""};
    }
    var reg = /^\d(\d*)(\.0+)?$/;
    return {flag:reg.test(str),errorMsg:"非负整数"};
}


/**判断是否为合法的保险卡前缀*/
function isVscardPrefix(str) {
    if(isEmpty(str)){
        return {flag:false,errorMsg:""};
    }
    if(str.trim().length != 3) {
        return {flag:false,errorMsg:""};
    } else {
        var reg = /^\d(\d*)$/;
        return {flag:reg.test(str),errorMsg:"保险卡前缀"};
    }
}


/**判断是否为正确的年份*/
function isYear(str) {
    if(isEmpty(str)){
        return {flag:true,errorMsg:"年份"};
    }
    var r = str.match(/^(\d{1,4})$/);
    if(r==null)
        return {flag:false,errorMsg:"年份"};
    var year = parseInt(str);
    if(year > 2100 || year < 1900) {
        //return {flag:false,errorMsg:"年份(1900年--2100年)"};
    }
    return {flag:true,errorMsg:""};
}


/**判断是否为正确的日期*/
function isDate(str, fieldObj) {
    if(isEmpty(str)){
        return {flag:true,errorMsg:""};
    }
    var r = str.match(/^(\d{4})(-|\/){0,1}(\d{1,2})\2{0,1}(\d{1,2})$/);
    if(r==null)
        return {flag:false,errorMsg:"日期"};
    var d= new Date(r[1], r[3]-1, r[4]);
    if(r[1] > 2100 || r[1] < 1900) {
        // return {flag:false,errorMsg:"日期(1900.1.1--2100.12.31)"};
    }
    //如果输入的是日期,则要求日期自动转化为固定格式
    var checkFlag = d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4];
    if(checkFlag && fieldObj != null) {
        //保证日期格式为yyyy-MM-dd
        if(r[3].length == 1) {
            r[3] = "0" + r[3];
        }
        if(r[4].length == 1) {
            r[4] = "0" + r[4];
        }
        fieldObj.value = r[1] + "-" + r[3] + "-" + r[4];
    }
    return {flag:checkFlag, errorMsg:"日期"};
}


/**
 * 校验是否是枚举或范围的组合形式,如1;2;3;[4,8];12;14;[16,19]
 * 作者:王致富
 * 日期:2010-09-03
 */
function isRangeOrEnum(str) {
    if(isEmpty(str)){
        return {flag:true,errorMsg:""};
    }
    str = str.trim();
    var reg = /^([\w:]{1,})(;[\w:]{1,})*$/;
    return {flag:reg.test(str),errorMsg:"枚举或范围"};
}
/**判断是否全部为大写字符*/
function isUppercase(str) {
    if(isEmpty(str)){
        return {flag:true,errorMsg:""};
    }
    var reg = /^[A-Z]+$/;
    return {flag:reg.test(str),errorMsg:"大写字符"};
}
/**判断是否全部为小写字母*/
function isLowercase(str) {
    if(isEmpty(str)){
        return {flag:true,errorMsg:""};
    }
    var reg = /^[a-z]+$/;
    return {flag:reg.test(str),errorMsg:"小写字符"};
}
/**是否为手机号码*/
function isMobile(str) {
    if(isEmpty(str)){
        return {flag:true,errorMsg:""};
    }
    var reg = /^(13|14|15|16|17|18|19)\d{9}$/;
    return {flag:reg.test(str),errorMsg:"手机号码"};
}
/**是否为数字*/
function isNumber(str){
    if(isEmpty(str)){
        return {flag:true,errorMsg:""};
    }
    if(!/^([-]?)\d+(\.\d+)?$/.test(str))
        return {flag:false,errorMsg:"数字"};
    try{
        if(parseFloat(str)!=str)
            return {flag:false,errorMsg:"数字"};
    }catch(ex){
        return {flag:false,errorMsg:"数字"};
    }
    return {flag:true};
}


/** 校验是否为正数字 */
function isPositiveNumber(str) {
    var result = isNumber(str);
    if(result.flag == false) {
        result.errorMsg = "正数";
        return result;
    }
    var value = parseFloat(str);
    if(value <= 0) {
        return {flag:false, errorMsg:"正数"};
    }
    return {flag:true};
}


/** 校验是否为非正数字 */
function isNotPositiveNumber(str){
    var result = isNumber(str);
    if(result.flag == false){
        result.errorMsg = "非正数字";
        return result;
    }
    var value = parseFloat(str);
    if(value > 0){
        return {flag:false, errorMsg:"非正数字"};
    }
    return {flag:true};
}


/** 校验是否为非负数字 */
function isNotNegativeNumber(str) {
    var result = isNumber(str);
    if(result.flag == false) {
        result.errorMsg = "非负数字";
        return result;
    }
    var value = parseFloat(str);
    if(value < 0) {
        return {flag:false, errorMsg:"非负数字"};
    }
    return {flag:true};
}


/** 校验是否为百分数 */
function isPercent(str) {
    var result = isNotNegativeNumber(str);
    if(result.flag == false) {
        result.errorMsg = "百分数";
        return result;
    }
    var value = parseFloat(str);
    if(value > 100) {
        return {flag:false, errorMsg:"百分数"};
    }
    return {flag:true};
}
/** 校验是否为百分数并且不能等于0 add by zhaosongyan */
function isNotNegativeNumber0(str) {
    var result = isNumber(str);
    if(result.flag == false) {
        result.errorMsg = "非负数字";
        return result;
    }
    var value = parseFloat(str);
    if(value <=0) {
        return {flag:false, errorMsg:"非负数字"};
    }
    return {flag:true};
}




/**是否为时间,时间格式为HH:MM:SS or HH,MM,SS or HH-MM-SS*/
function isTime(str) {
    if(isEmpty(str)){
        return {flag:true,errorMsg:""};
    }
    var a = str.match(/^(\d{1,2})(:|,|-)?(\d{1,2})\2(\d{1,2})$/);
    if (a == null) {
        return {flag:false,errorMsg:"时间"};
    }
    if (a[1]>24 || a[3]>60 || a[4]>60) {
        return {flag:false,errorMsg:"时间"};
    }
    return {flag:true};
}
/**是否为日期时间
 * 时间格式为
 * YYYY-MM-DD HH:MM:SS 或 YYYY/MM/DD HH:MM:SS
 */
function isDateTime(str){
    if(isEmpty(str)){
        return {flag:true,errorMsg:""};
    }
    var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;
    var r = str.match(reg);
    if(r==null)
        return {flag:false,errorMsg:"日期时间"};
    var d= new Date(r[1], r[3]-1,r[4],r[5],r[6],r[7]);
    return {flag:(d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]&&d.getHours()==r[5]&&d.getMinutes()==r[6]&&d.getSeconds()==r[7]),
        errorMsg:"日期时间"};
}
/**是否全部为中文*/
function isChinese(str){
    if(isEmpty(str)){
        return {flag:true,errorMsg:""};
    }
    var reg = /.{0}[u4e00-u9fa5]+$/;
    return {flag:!reg.test(str),errorMsg:"中文"};
}
/**是否包含中文*/
function containChinese(str){
    if(isEmpty(str)){
        return {flag:true,errorMsg:""};
    }
    var reg = /^[u4E00-u9FA5]+$/;
    return {flag:!reg.test(str),errorMsg:"包含中文的信息"};
}
/**是否为正确的身份证号码*/
function isCardID(cardId){
    if(isEmpty(cardId)){
        return {flag:true,errorMsg:""};
    }
    var error = "身份证号码";
    var cities={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:"国外"};
    //迁移单身份证号位15位校验 --- start
    var dmflag = document.getElementsByName('prpCmain.dmFlag')[0];
    if(dmflag != null && dmflag.value == '1' && cardId.length == 15){
        return true;
    }
    //迁移单身份证号位15位校验 --- end
    if(cities[parseInt(cardId.substr(0,2))] == null) {
        return {flag:false,errorMsg:error};
    }
    var sBirthday = "";
    //增加15位身份证的校验
    if(cardId.length == 15){
        sBirthday = "19" + cardId.substr(6,2) + "-" + Number(cardId.substr(8,2)) + "-" + Number(cardId.substr(10,2));
    }else if(cardId.length == 18){
        if(!/^\d{17}(\d|x)$/i.test(cardId)) {
            return {flag:false,errorMsg:error};
        }
        sBirthday = cardId.substr(6,4) + "-" + Number(cardId.substr(10,2)) + "-" + Number(cardId.substr(12,2));
    }
    var d = new Date(sBirthday.replace(/-/g,"/")) ;
    if(sBirthday != (d.getFullYear() + "-" + (d.getMonth()+1) + "-" + d.getDate())) {
        return {flag:false,errorMsg:error};
    }
    lastStr = cardId.substr(cardId.length-1);
    //增加15位身份证的校验
    if(cardId.length == 15){
        if(!isNumber(cardId)){
            return {flag:false,errorMsg:"身份证号码错误,15位不能含有英文字母!!"};
        }
    }else if(cardId.length == 18){
        if(lastStr == 'x'){
            return {flag:false,errorMsg:"最后一位是X的不能录入小写!"};
        }
    }
    return {flag:true};
}


/**是否为正确的电子邮件地址*/
function isEmail(str)  {
    if(isEmpty(str)){
        return {flag:true,errorMsg:""};
    }
    //var reg = new RegExp("^[0-9a-zA-Z]+@[0-9a-zA-Z]+[\.]{1}[0-9a-zA-Z]+[\.]?[0-9a-zA-Z]+$");
    //modify by guoyaori 20120806 begin reason MT-875 邮件的校验规则过于严格
    //  var reg = new RegExp("^.*@[0-9a-zA-Z]+[\.]{1}[0-9a-zA-Z]+[\.]?[0-9a-zA-Z]+$");
    //modify by guoyaori 20120806 end reason MT-875 邮件的校验规则过于严格
    //modify by wanganna 20130131 begin reason:生产bug0003385: 人身险系统邮箱校验有漏洞,正确的邮箱格式却提示错误,如:jiangspsc@ccic-net.com.cn
    var reg = new RegExp("^.+@[\\w\\-]+(\\.[\\w\\-]+)+$");
    //modify by wanganna 20130131 begin reason:生产bug0003385: 人身险系统邮箱校验有漏洞,正确的邮箱格式却提示错误,如:jiangspsc@ccic-net.com.cn
    return {flag:reg.test(str),errorMsg:"请输入正确的电子邮件"};
}
/**是否为正确的邮编*/
function isZipcode(str){
    str = trim(str);
    if(isEmpty(str)){
        return {flag:true,errorMsg:""};
    }
    var reg = new RegExp("^\\d{6}$");
    return {flag:reg.test(str.trim()),errorMsg:"邮政编码"};
}
/**是否为正确的电话号码
 * 电话号码的举例为:
 * 010-86767676
 * 0723-54454434
 */
function isTelephone(str){
    if(isEmpty(str)){
        return {flag:true,errorMsg:""};
    }
    var reg = new RegExp("^(([0\\+]\\d{2,3}(-)?)?(0\\d{2,3})(-)?)?(\\d{7,8})(-(\\d{3,}))?$");
    return {flag:reg.test(str),errorMsg:"电话号码"};
}


/**
 * 是否为正确的联系方式,即是否为电话或手机
 * 先校验是否为电话号码,如果不是电话号码,然后校验是否为手机
 */
function isTelOrMobile(str) {
    if(isEmpty(str)){
        return {flag:true,errorMsg:""};
    }
    var reg = new RegExp("^(([0\\+]\\d{2,3}(-)?)?(0\\d{2,3})(-)?)?(\\d{7,8})(-(\\d{3,}))?$");
    if(reg.test(str)) {
        return {flag:reg.test(str),errorMsg:"手机或电话号码"};
    } else {
        reg = /^(13|14|15|16|17|18|19)\d{9}$/;
        return {flag:reg.test(str),errorMsg:"手机或电话号码"};
    }
}


/**
 * 是否为有效的小时
 */
function isValidateHour(str){
    var result = isNotNegativeNumber(str);
    if(result.flag == false) {
        result.errorMsg = "有效小时";
        return result;
    }
    var value = parseInt(str);
    if(value<0 || value>24){
        return {flag:false,errorMsg:"有效小时"};
    }
    return {flag:true};
}
0 0