<template>
    <div></div>
</template>

<script>
var rules = { // Private object
    email : {
        check : function(label, value,errMsg) {
            
            if(value != null && value != ""){
            if (value && testPattern(value, ".+@.+\..+")) {
                return null;
            }
            return errMsg||label+"必须为有效的邮件地址，请重新输入";
            
            
            }else{
                return null;
            }
            
            
        }
    },
    required : {
        check : function(label, value,errMsg) {
            if (value===0 || (value&&trim(value)!="")) {
                return null;
            } else {
                return errMsg||"请输入"+label;
            }
        }
    },
    min : {
        check : function(label, value, minValue,errMsg) {
            if ((parseFloat(value) || 0) < minValue)
                return errMsg||label+"不能小于" + minValue + "，请重新输入";
            return null;
        }
    },
    max : {
        check : function(label, value, maxValue,errMsg) {
            if ((parseFloat(value) || 0) > maxValue)
                return errMsg||label+"不能大于" + maxValue + "，请重新输入";
            return null;
        }
    },
    maxlen: {
        check : function(label, value, maxValue,errMsg) {
            var lenB = value.replace(/[^\x00-\xff]/g,"**").length;
            if (lenB > maxValue)
                return errMsg||label+"不能超过" + maxValue/2 + "个中文或"+maxValue+"个英文，请重新输入";
            return null;
        }
    },
    between: {
        check : function(label, value, minlen , maxlen ,errMsg) {
            if(value!="" && minlen!=undefined){
                var len=value.length;
                if(maxlen==undefined && len!=minlen){ //固定长度
                    return errMsg||label+"长度必须为" +minlen+"，请重新输入";
                }else if(maxlen && (len<minlen || len>maxlen)){
                    return errMsg||label+"长度必须在 " +minlen+" ~ "+maxlen+" 个字符内，请重新输入";
                }
            }
            return null;
        }
    },
    phone : {
        check : function(label, value,errMsg) {
            if (value != null && value != "") {
                var reg = /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/;
                if (!reg.test(value)) {
                    return errMsg||label+"必须为电话号码，请重新输入";
                } else {
                    return null;
                }
            } else {
                return null;
            }
        }
    },
    mobile : {
        check : function(label, value, errMsg) {
            if (value != null && value != "") {
                var reg = /^((\(\d{3}\))|(\d{3}\-))?1[3458][1234567890]\d{8}$/;
                if (!reg.test(value)) {
                    return errMsg||label+"必须为手机号码，请重新输入";
                } else {
                    return null;
                }
            } else {
                return null;
            }
        }
    },
    phonemobile : {
        check : function(label, value, errMsg) {
            if (value != null && value != "") {
                var reg = /^1\d{10}$|^(0\d{2,3}-?|\(0\d{2,3}\))?[1-9]\d{4,7}(-\d{1,8})?$/;
                if (!reg.test(value)) {
                    return errMsg||label+"必须为电话或手机号码，请重新输入";
                } else {
                    return null;
                }
            } else {
                return null;
            }
        }
    },
    url : {
        check : function(label, value, errMsg) {
            if (value != null && value != "") {
                var reg = /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/;
                if (!reg.test(value)) {
                    return errMsg||label+"必须为URL，请重新输入";
                } else {
                    return null;
                }
            } else {
                return null;
            }
        }
    },
    ip : {
        check : function(label, value, errMsg) {
            if (value != null && value != "") {
                var reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])(\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){3}$/;
                if (!reg.test(value)) {
                    return errMsg||label+"必须为IP地址，请重新输入";
                } else {
                    return null;
                }
            } else {
                return null;
            }
        }
    },
    currency : {
        check : function(label, value, errMsg) {
            if (value != null && value != "") {
                var reg = /^\d+(\.\d+)?$/;
                if (!reg.test(value)) {
                    return errMsg||label+"必须为货币金额，请重新输入";
                } else {
                    return null;
                }
            } else {
                return null;
            }
        }
    },
    isnum : {
        check : function(label, value,errMsg) {
            if (value != null && value != "") {
                if (isNaN(value)) {
                    return errMsg||label+"必须为数字，请重新输入";
                } else {
                    return null;
                }
            } else {
                return null;
            }
        }
    },
    number : {
        check : function(label, value,errMsg) {
            if (value != null && value != "") {
                var reg = /^[1-9]\d*$/;
                if (!reg.test(value) && value !="0") {
                    return errMsg||label+"必须为数字，请重新输入";
                } else {
                    return null;
                }
            } else {
                return null;
            }
        }
    },
    number_query : {//查询时使用，只允许输入数字，但是允许0开头的数字
        check : function(label, value,errMsg) {
            if (value != null && value != "") {
                var reg = /^\d*$/;
                if (!reg.test(value) && value !="0") {
                    return errMsg||label+"必须为数字，请重新输入";
                } else {
                    return null;
                }
            } else {
                return null;
            }
        }
    },
    postcode : {
        check : function(label, value, errMsg) {
            if (value != null && value != "") {
                var reg = /^[1-9]\d{5}$/;
                if (!reg.test(value)) {
                    return errMsg||label+"必须为邮政编码，请重新输入";
                } else {
                    return null;
                }
            } else {
                return null;
            }
        }
    },
    qq : {
        check : function(label, value, errMsg) {
            if (value != null && value != "") {
                var reg = /^[1-9]\d{4,8}$/;
                if (!reg.test(value)) {
                    return errMsg||label+"必须为QQ号码，请重新输入";
                } else {
                    return null;
                }
            } else {
                return null;
            }
        }
    },
    integer : {
        check : function(label, value, errMsg) {
            if (value != null && value != "") {
                var reg = /^[-\+]?\d+$/;
                if (!reg.test(value)) {
                    return errMsg||label+"必须为整数，请重新输入";
                } else {
                    return null;
                }
            } else {
                return null;
            }
        }
    },
    float : {
        //用法：float(6.2)表示输入的数字中，整数位数最多为6位，而小数点后的数字可以有或者没有，如果有的话，必须为2位。
        //也可：float(6)表示不限制整数位，而小数点后的数字可以有或者没有，如果有的话，必须为6位。
        check : function(label, value, decimal, errMsg) {
            if (value != null && value != "") {
                var exp = '';
                var errMsgFloat = errMsg||label;
                decimal = '' + decimal;
                if(decimal != null && decimal != undefined && decimal.indexOf('.') > 0) {
                    var nums = decimal.split(".");
                    exp = "^[-\+]?\\d{1,"+nums[0]+"}(\\.\\d{"+nums[1]+"})?$";
                    errMsgFloat += '的整数部分不能超过'+nums[0]+'位且小数部分应保留'+nums[1]+'位，请重新输入';
                } else {
                    exp="^[-\+]?\\d+(\\.\\d{"+decimal+"})?$";
                    errMsgFloat += "必须为保留"+decimal+"位小数点的浮点数，请重新输入";
                }
                //var reg = /^[-\+]?\d+(\.\d+)?$/;
                //var exp="^[-\+]?\\d+(\\.\\d{0,"+decimal+"})?$";
                var reg = new RegExp(exp);
                if (!reg.test(value)) {
                    if(decimal){
                        //return errMsg||label + "必须为保留"+decimal+"位小数点的浮点数，请重新输入";
                        return errMsgFloat;
                    }
                    return errMsg||label + "必须为浮点数，请重新输入";
                } else {
                    return null;
                }
            } else {
                return null;
            }
        }
    },
    aboveZero : {
        //用法：aboveZero(1) 表示只能为正数；0，表示可以为0或正数；不设值，那么都允许
        check : function(label, value, above, errMsg) {
            if (value != null && value !== "") {
                var errMsgFloat = errMsg || label;
                if(above===undefined) above = 0;
                if(above == 1 && value <= 0) {
                    return errMsgFloat += '不能小于或等于0';
                } else if(above == 0 && value < 0) {
                    return errMsgFloat += '不能小于0';
                } else {
                    return null;
                }
                
            } else {
                return null;
            }
        }
    },
    english : {
        check : function(label, value, errMsg) {
            if (value != null && value != "") {
                var reg = /^[A-Za-z]+$/;
                if (!reg.test(value)) {
                    return errMsg||label+"必须为英文字母，请重新输入";
                } else {
                    return null;
                }
            } else {
                return null;
            }
        }
    },
    chinese : {
        check : function(label, value, errMsg) {
            if (value != null && value != "") {
                var reg = /^[\u0391-\uFFE5]+$/;
                if (!reg.test(value)) {
                    return errMsg||label+"必须为中文，请重新输入";
                } else {
                    return null;
                }
            } else {
                return null;
            }
        }
    },
    username : {
        check : function(label, value, errMsg) {
            if (value != null && value != "") {
                var reg = /^[a-z]\w{2,}$/i;
                if (!reg.test(value)) {
                    return errMsg||label+"必须为英文字母或英文字母加数字，请重新输入";
                } else {
                    return null;
                }
            } else {
                return null;
            }
        }
    },
    code : {
        check : function(label, value, errMsg) {
            if (value != null && value != "") {
                var reg = /^[^\,|^\，]+[A-Za-z0-9\,|\，]+[^\,|^\，]$/;
                if (!reg.test(value)) {
                    return errMsg||label+"必须为英文字母或数字或','，请重新输入";
                } else {
                    return null;
                }
            } else {
                return null;
            }
        }
    },
    safe : {
        check : function(label, value, errMsg) {
            if (value != null && value != "") {
                var reg = /^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/;
                if (reg.test(value)) {
                    return errMsg||label+"必须为字母加数字加特殊符，请重新输入";
                } else {
                    return null;
                }
            } else {
                return null;
            }
        }
    },
    filter : {
        check : function(label, input, filter,errMsg) {
            var tst = new RegExp("^.+\.(?=EXT)(EXT)$".replace(/EXT/g, filter.split(/\s*,\s*/).join("|")), "gi")
                    .test(input);
            if (!tst) {
                return errMsg||label+"必须为" + filter + "文件，请重新输入";
            } else {
                return null;
            }
        }
    },
    repeat : {
        check : function(label, value, target, targetLabel,errMsg) {
            var elem = document.getElementById(target);
            if (value != elem.value) {
                return errMsg||label+"必须与" + targetLabel + "相同，请重新输入";
            } else {
                return null;
            }
        }
    },
    idcard : {
        check : function(label, value, errMsg) {
                if(!value) return null;
            var number = value;
            var date, Ai;
            var verify = "10x98765432";
            var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];
            var area = [ '', '', '', '', '', '', '', '', '', '', '', '北京', '天津', '河北', '山西', '内蒙古', '', '', '',
                    '', '', '辽宁', '吉林', '黑龙江', '', '', '', '', '', '', '', '上海', '江苏', '浙江', '安微', '福建', '江西',
                    '山东', '', '', '', '河南', '湖北', '湖南', '广东', '广西', '海南', '', '', '', '重庆', '四川', '贵州', '云南',
                    '西藏', '', '', '', '', '', '', '陕西', '甘肃', '青海', '宁夏', '新疆', '', '', '', '', '', '台湾', '',
                    '', '', '', '', '', '', '', '', '香港', '澳门', '', '', '', '', '', '', '', '', '国外' ];
            var re = number
                    .match(/^(\d{2})\d{4}(((\d{2})(\d{2})(\d{2})(\d{3}))|((\d{4})(\d{2})(\d{2})(\d{3}[x\d])))$/i);
            if (re == null)
                return errMsg||label+"必须为正确的身份证号，请重新输入";;
            if (re[1] >= area.length || area[re[1]] == "")
                return errMsg||label+"必须为正确的身份证号，请重新输入";;
            if (re[2].length == 12) {
                Ai = number.substr(0, 17);
                date = [ re[9], re[10], re[11] ].join("/");
            } else {
                Ai = number.substr(0, 6) + "19" + number.substr(6);
                date = [ "19" + re[4], re[5], re[6] ].join("/");
            }
            if (!IsDate(date, "ymd"))
                return errMsg||label+"必须为正确的身份证号，请重新输入";;
            var sum = 0;
            for ( var i = 0; i <= 16; i++) {
                sum += Ai.charAt(i) * Wi[i];
            }
            Ai += verify.charAt(sum % 11);
            var isIdCard = (number.length == 15 || number.length == 18 && number == Ai);
            if (!isIdCard) {
                return errMsg||label+"必须为正确的身份证号，请重新输入";
            } else {
                return null;
            }
        }
    },
    compare : {
        check : function(label, op1, operator, op2, errMsg) {
            var rzt = false;
            switch (operator) {
            case "!=":
                rzt = (op1 != op2);
            case ">":
                rzt = (op1 > op2);
            case ">=":
                rzt = (op1 >= op2);
            case "<":
                rzt = (op1 < op2);
            case "<=":
                rzt = (op1 <= op2);
            default:
                rzt = (op1 == op2);
            }
            if (!rzt) {
                return errMsg||label+"必须" + operator + "" + op2 + "，请重新输入";
            }
        }
    },
    range : {
        check : function(label, value, min, max,errMsg) {
            if (value.length>20) {
                return errMsg||label+"数字长度不能超过20位，请重新输入";
            }
            if (min > (value || 0) || (value || 0) > max) {
                return errMsg||label+"必须在" + min + "~" + max + "之间，请重新输入";
            } else {
                return null;
            }
        }
    },
    regexp : {
        check : function(label,op, reg,errMsg) {
            if (!(new RegExp(reg, "g").test(op))) {
                return errMsg||label+"不符合规则，请重新输入";
            } else {
                return null;
            }
        }
    },
    date : {
        check : function(label, value, format,errMsg) {
            if (value != null && value != "") {
                var fmat = format || "ymd";
                if (!IsDate(value, fmat)) {
                    if (fmat == "ymd")
                        return errMsg||label+"必须为日期类型(2006/01/01)，请重新输入";
                    else
                        return errMsg||label+"必须为日期类型(30/01/2006)，请重新输入";
                } else {
                    return null;
                }
            } else {
                return null;
            }
        }
    },
    dateless : {
        check : function(label, value, e, targetLabel, errMsg) {
            var elem = document.getElementById(e);
            var date1 = new Date(Date.parse(value));
            var date2 = new Date(Date.parse(elem.value));
            if (date1 > date2) {
                return errMsg||label+"必须小于等于" + targetLabel + "，请重新输入";
            } else {
                return null;
            }
        }
    },
    before : {
        check : function(label, value, date, errMsg) {
            var date1 = new Date(Date.parse(value));
            var date2 = new Date();
            if (date)
                date2 = new Date(Date.parse(date));
            if (date1 > date2) {
                if (date)
                    return errMsg||label+"必须小于等于" + date + "，请重新输入";
                else
                    return errMsg||label+"必须小于等于今天，请重新输入";
            } else {
                return null;
            }
        }
    },
    inmonth : {
        check : function(label, value, e, targetLabel, errMsg) {
            var elem = document.getElementById(e);
            var date1 = new Date(Date.parse(value));
            var date2 = new Date(Date.parse(elem.value));
            if ((date1.getFullYear() == date2.getFullYear()) && (date1.getMonth() == date2.getMonth())) {
                return null;
            } else {
                return errMsg||label+"必须与" + targetLabel + "在同一个月内，请重新输入";
            }
        }
    }
}
var addRule = (name,opt)=>{
    rules[name] = opt;
}
/* 校验使用方式
	返回值 null:成功  具体错误信息:失败
	jsValidator.valid("require","msisdn",true);  js\customfunc\IBOPUtils.js
	返回值 同上
	getRule("require").check(null,$('#msisdn').val())  js\jquery-validator-plugin.js
	返回值 true:成功  false:失败    ----和上面两个相反
	$('#msisdn').validate() js\jquery-validator-plugin.js
*/

//校验框架自定义扩展
addRule("IBOPDEMO",{//ruleName为规则名称，即validation的规则定义
    check: function(value) {//规则校验接口，业务系统的规则校验就在这个接口里体现了
        if(value != "test") { //value即表单元素的当前值
            return "错误提示";
        }
        return null;
    }
});

/*
 * 是否手机号码判断
 * @__value 手机号码 不可空
 * @__is_yd boolean 可空
 */
addRule("isMobile",{
    check: function(label,mobileNo,param) {
		if(mobileNo=="") return null;
		if(!param) param={};
		var reg1x = /(^1[3,4,5,7,8][0-9]{9}$)/;
		var reg2x = /(^1064[7,8][0-9]{8}$)/;
		var reg13x_yd = /(^134[0-8]{1}[0-9]{7}$)|(^13[5-9]{1}[0-9]{8}$)/;	
		var reg13x_lt = /(^13[0-2]{1}[0-9]{7}$)|(^13[5-9]{1}[0-9]{8}$)/;	
		var reg13x_dx = /(^1349[0-9]{7}$)|(^133[0-9]{8}$)/;	
		
		var reg14x_yd = /(^14[7,8][0-9]{8}$)/;
		
		var reg15x_yd = /(^15[0,1,2,7,8,9][0-9]{8}$)/;
		var reg15x_lt = /(^15[5,6][0-9]{8}$)/;
		var reg15x_dx = /(^153[0-9]{8}$)/;
		
		var reg162x_dx = /(^162[0-9]{8}$)/;
	    var reg165x_yd = /(^165[0-9]{8}$)/;
		var reg166x_lt = /(^166[0-9]{8}$)/;
		var reg167x_lt = /(^167[0-9]{8}$)/;
		
		var reg18x_yd = /(^18[2,3,4,7,8][0-9]{8}$)/;	
		var reg18x_lt = /(^18[5,6][0-9]{8}$)/;	
		var reg18x_dx = /(^18[0,9][0-9]{8}$)/;	
		
		var reg178x_yd = /(^178[0-9]{8}$)/;
		var reg172x_yd = /(^172[0-9]{8}$)/;
		var reg174x_dx = /(^174[0-9]{8}$)/;
		
		var reg198x_yd = /(^198[0-9]{8}$)/;
		var reg191x_dx = /(^191[0-9]{8}$)/;
		var reg199x_dx = /(^199[0-9]{8}$)/;
		
		var errmsg=null;
		if(param.is_yd){
			if(reg13x_yd.test(mobileNo)||reg14x_yd.test(mobileNo)||reg15x_yd.test(mobileNo)
				||reg18x_yd.test(mobileNo)||reg2x.test(mobileNo)||reg178x_yd.test(mobileNo)
				||reg172x_yd.test(mobileNo)||reg198x_yd.test(mobileNo)){
			    
			}else {
				errmsg = "移动手机号码必须为13[5-9],134[0-8],14[7,8],15[0-2,7-9],18[2,3,4,7,8],178,172,198开头的11位数字或10648开头的13位号码,请重新输入";
			}
		}else{
			if(reg1x.test(mobileNo)||reg2x.test(mobileNo)||reg13x_yd.test(mobileNo)||reg13x_lt.test(mobileNo)||reg13x_dx.test(mobileNo)
				||reg14x_yd.test(mobileNo)||reg15x_yd.test(mobileNo)||reg15x_lt.test(mobileNo)||reg15x_dx.test(mobileNo)
				||reg162x_dx.test(mobileNo)||reg165x_yd.test(mobileNo)||reg166x_lt.test(mobileNo)||reg167x_lt.test(mobileNo)
				||reg178x_yd.test(mobileNo)||reg172x_yd.test(mobileNo)||reg174x_dx.test(mobileNo)
				||reg18x_yd.test(mobileNo)||reg18x_lt.test(mobileNo)||reg18x_dx.test(mobileNo)
				||reg198x_yd.test(mobileNo)||reg191x_dx.test(mobileNo)||reg199x_dx.test(mobileNo)){
			    
			}else {
				errmsg="手机号码必须为13,14,15,17,18,162,165,166,167,191,198,199开头的11位数字或10648开头的13位号码,请重新输入";
			}
		}
		if(errmsg && param.errMsg) errmsg=param.errMsg;
		if(label && errmsg) errmsg=label+" 为"+errmsg;
		if(errmsg && param.is_tips) showMsg(errmsg);
		return errmsg;
    }
});


/**checkChineseCount
 *校验中文字数
 */
addRule("checkChineseCount",{
    check: function(tips,nameString,param) {
		if(!param) param={};
		var errmsg=null;
		if(nameString=="") return null;
		if(!tips)tips="您输入的";
		if(!param.min_number){
			showMsg("校验规则checkChineseCount 缺少参数");
			return "校验规则checkChineseCount 缺少参数";
		}
		var ChineseAmount = $CommonUtil.getIncludeCharAmount(nameString,"Chinese");
		
		if(ChineseAmount<param.min_number){
			errmsg=tips+"为无效的名字，必须大于等于"+param.min_number+"个汉字，请重新输入";
		}
		if(errmsg && param.is_tips) showMsg(errmsg);
		return errmsg;
    }
});

/**isPhoneNo
 *验证是否是电话号码,
 *(1)电话号码由数字、"("、")"和"-"构成
 *(2)电话号码为3到8位
 *(3)如果电话号码中包含有区号，那么区号为三位或四位
 *(4)区号用"("、")"或"-"和其他部分隔开 ,区号3位到4位
 */
addRule("isPhoneNo",{
    check: function(tips,phoneNo,param) {
		if(!param) param={};
		var errmsg=null;
		var reg=/(^[0-9]{3,8}$)|(^[0-9]{3,4}[\-]?[0-9]{3,8}[\-]?[0-9]{3,4}$)/;
		//(^[0-9]{3,4}[\-]?[0-9]{3,8}$)|
		//|(^[0-9]{3,8}$)|(^[0-9]{3,4}[0-9]{3,8}[\-][0-9]{3,4}$)
		if(reg.test(phoneNo)){}
		else if(phoneNo==""){
		
		}
		else{
			errmsg = "无效的电话号码,请重新输入.";
			if(tips != null){errmsg = tips + "为无效的电话号码,请重新输入.";}
		}
		if(errmsg && param.is_tips) showMsg(errmsg);
		return errmsg;
    }
});



/**isPostCode
 *验证是否是邮政编码
 * 这里只验证邮编的6位是否全是数字,并没有严格的校验.
 */
addRule("isPostCode",{
    check: function(tips,postCode,param) {
		if(!param) param={};
		var errmsg=null;
		var reg = /^\d{6}$/;
		if(reg.test(postCode)){}
		else if(postCode==""){}
		else{
			errmsg = "无效的邮政编码,请重新输入.";
			if(tips != null){errmsg = tips + "为无效的邮政编码,请重新输入.";}
		}
		if(errmsg && param.is_tips) showMsg(errmsg);
		return errmsg;
    }
});


/**money
 *验证是否是金额
 *必须为合法的数字(整数/浮点数都可以,精度不限制
 */
addRule("money",{
    check: function(tips,money,param) {
		if(!param) param={};
		var errmsg=null;
		money=money+"";
		var reg = /^\d+$|^\d+[.]{1}\d+$/;
		if(reg.test(money)){
			var zhengshu_len=0;
			var xiaoshu_len=0;
			if(money.indexOf(".")!=-1){
				var tmp=money.split(".");
				zhengshu_len=tmp[0].length;
				xiaoshu_len=tmp[1].length;
			}else{
				zhengshu_len=money.length;
			}
			if(param.xs_maxlen && xiaoshu_len>param.xs_maxlen){ //小数点后最高位数
				errmsg="金额输入不正确！保留"+param.xs_maxlen+"位小数！";
			}
		}
		else if(money==""){}
		else{
			errmsg = "无效的金额,请重新输入.";
			if(tips != null){errmsg = tips + "为无效的金额,请重新输入.";}
		}
		if(errmsg && param.is_tips) showMsg(errmsg);
		return errmsg;
    }
});


/**isNum
 *验证是纯数字
 */
addRule("isNum",{
    check: function(tips,num,param) {
		if(!param) param={};
		var errmsg=null;
		var reg = /^\d*$/;
		if(reg.test(num)){}
		else if(num==""){}
		else{
			errmsg = "无效的数字,请重新输入。";
			if(tips != null){errmsg = tips + "为无效的数字,请重新输入。";}
		}
		if(errmsg && param.is_tips) showMsg(errmsg);
		return errmsg;
    }
});

/**isNumOrLetter
 *验证是否是数字和字母组成的字符串
 */
addRule("isNumOrLetter",{
    check: function(tips,num,param) {
		if(!param) param={};
		var errmsg=null;
		var reg = /^[A-Za-z0-9]*$/;
		if(reg.test(num)){}
		else if(num==""){}
		else{
			errmsg = "必须为字母或者数字组成,请重新输入.";
			if(tips != null){errmsg = tips + "必须为字母或者数字组成,请重新输入.";}
		}
		if(errmsg && param.is_tips) showMsg(errmsg);
		return errmsg;
    }
});

var trim = function(text){
    if(!text || !text.replace) return text;
    return text.replace(/^\s+|\s+$/gm,'');
}
var testPattern = function(value, pattern) { // Private Method
    var regExp = new RegExp("^" + pattern + "$", "");
    return regExp.test(value);
}

var IsDate = function(op, formatString) {
    formatString = formatString || "ymd";
    var m, year, month, day;
    switch (formatString) {
    case "ymd":
        m = op.match(new RegExp("^((\\d{4})|(\\d{2}))([/])(\\d{1,2})\\4(\\d{1,2})$"));
        if (m == null)
            return false;
        day = m[6];
        month = m[5] * 1;
        year = (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3], 10));
        break;
    case "dmy":
        m = op.match(new RegExp("^(\\d{1,2})([/])(\\d{1,2})\\2((\\d{4})|(\\d{2}))$"));
        if (m == null)
            return false;
        day = m[1];
        month = m[3] * 1;
        year = (m[5].length == 4) ? m[5] : GetFullYear(parseInt(m[6], 10));
        break;
    default:
        break;
    }
    if (!parseInt(month))
        return false;
    month = month == 0 ? 12 : month;
    var date = new Date(year, month - 1, day);
    return (typeof (date) == "object" && year == date.getFullYear() && month == (date.getMonth() + 1) && day == date
            .getDate());
    function GetFullYear(y) {
        return ((y < 30 ? "20" : "19") + y) | 0;
    }
}


export default {
    addRule : function(name, rule) {// 添加自定义规则
        rules[name] = rule;
    },
    getRule : function(name) {// 根据validation名称获取规则
        return rules[name];
    },
    validObj(data,validCfg,nameMap){
        var errmsg = "";
        if(!nameMap) nameMap = {};
        for(var key in validCfg){
            var rulelist = validCfg[key];
            if(!rulelist || !rulelist.length) continue;
            for(var i=0;i<rulelist.length;i++){
                var ruleexp = rulelist[i];
                var value = data[key];
                var name = nameMap[key] || "";
                errmsg = this.validField(ruleexp,value,name);
                if(errmsg) return errmsg;
            }
        }
    },
    validField(ruleexp,elemValue,label){
        var errmsg="";
        if(elemValue===undefined) elemValue = "";
        else if(typeof(elemValue)=="string")elemValue+="";
        if(!ruleexp) return;
        if(typeof(ruleexp) =="function"){
            errmsg = ruleexp(elemValue);
            return errmsg;
        }
        var rule = this.getRule(ruleexp.replace(/\(.*\)/, ""));// 校验规则
        if(!rule){
           return "'"+ruleexp+"' 校验规则不存在";
        }
        var paramStr = ruleexp.match(/\(.*\)/);// 参数
        if (paramStr) {// 带参
            var param = "'"+label+"',elemValue," +paramStr[0].substr(1, paramStr[0].length - 2);
            errmsg = eval("rule.check(" + param + ")");
        } else {
            errmsg = eval("rule.check('"+label+"',elemValue)");
        }
        return errmsg;
    }
}


</script>