一个关于form表单验证的js

/**
 * 使用本js必须包含prototype.js(>=1.5), util.js和dateUtils.js
 */

 Validator = {
    // Require应该允许空白字符,如果不允许空白,请使用NoBlank -whj 2007-5-12
    Require : /^/S+/,
    NoBlank: /^/S+$/,
    Email : /^/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*$/,
    Emails : /^((/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*)([,;]{0,1}))*$/,
    Phone : /^((/(/d{2,3}/))|(/d{3}/-))?(/(0/d{2,3}/)|0/d{2,3}-)?[1-9]/d{6,7}(/-/d{1,4})?$/,
    Mobile : /^((/(/d{2,3}/))|(/d{3}/-))?((1/d{10}))$/,
    Url : /^http:[A-Za-z0-9]+/.[A-Za-z0-9]+[//=/?%/-&_~`@[/]/':+!]*([^<>/"/"])*$/,
    IdCard : "this.IsIdCard(value)",
    IdCard1 : "this.IsIdCard1(value)",
    Currency : /^/d+(/./d+)?$/,
    Number : /^/d+$/,
    Number1 : /^/d+X?$/,
    Zip : /^[0-9]/d{5}$/,
    Zip1 : /^62+[0-9]/d{3}$/,
    BankCard  :  /^62+[0-9]/d{10,17}$/,
    QQ : /^[1-9]/d{4,8}$/,
    Integer : /^[-/+]?/d+$/,
    PInt : /^[+]?/d+$/,
    NInt : /^-?/d+$/,
    Double : /^[-/+]?/d+(/./d+)?$/,
    English : /^[A-Za-z]+$/,
    Chinese :  /^[/u0391-/uFFE5]+$/,
    Username : /^[a-z, 0-9]{4,20}|/w{4,20}$/i,
    CheckPswd : function(passwordStr){ //验证密码,此函数由郑亮添加,2009/11/12
                    var isRight = true;
                    var passRule = /^(([0-9]+[a-zA-Z]+[0-9]*)|([a-zA-Z]+[0-9]+[a-zA-Z]*))+$/;//此正则表达匹配至少一个数字和一个字母且长度为6-25位。
                    if(!passRule.test(passwordStr) || passwordStr.length < 6 || passwordStr.length >20) {
                        isRight = false;
                    }    
                    else { //验证至少有三个字符不同
                        var pswdArray = [];
                        var n=0;
                        while(n<passwordStr.length){
                            pswdArray.push(passwordStr.substring(n,n+1));
                            n++;
                        }
                        var tempArray = [];
                        tempArray.push(pswdArray[0]);
                        for(var i=0;i<pswdArray.length;i++){
                            var isexist = false;
                            for(var j=0;j<tempArray.length;j++){
                                if(tempArray[j] == pswdArray[i]){
                                    isexist = true;
                                }
                                else if(j == tempArray.length-1 && !isexist){
                                    tempArray.push(pswdArray[i]);
                                }
                            }
                            if(tempArray.length > 3) break;
                        }
                        
                        if(tempArray.length < 3){
                            isRight = false;
                        }        
                    }
                    return isRight;
                },
    Password : "this.CheckPswd(value)",            
    UnSafe : /^(([A-Z]*|[a-z]*|/d*|[-_/~!@#/$%/^&/*/./(/)/[/]/{/}<>/?/'/"]*)|.{0,5})$|/s/,
    IsSafe : function(str){return !this.UnSafe.test(str);},
    SafeString : "this.IsSafe(value)",
    Filter : "this.DoFilter(value, getAttribute('accept'))",
    Limit : "this.limit(value.length,getAttribute('min'),  getAttribute('max'))",
    LimitB : "this.limit(this.LenB(value), getAttribute('min'), getAttribute('max'))",
    Date : "this.IsDate(value, getAttribute('format'), getAttribute('min'), getAttribute('max'))",
    DayHM : "this.IsDayHM(value, getAttribute('format'), getAttribute('min'), getAttribute('max'))",
    TimeHM : /^[0-9, 10-24]{1,2}:[0-30, 30-59]{1,2}$/,
    DayHMS : "this.IsDayHMS(value, getAttribute('format'), getAttribute('min'), getAttribute('max'))",
    Repeat : "value == document.getElementsByName(getAttribute('to'))[0].value",
    Range : "getAttribute('min') < (value|0) && (value|0) < getAttribute('max')",
    Compare : "this.compare(value,getAttribute('operator'),getAttribute('to'))",
    // regexp是一个正则表达式,注意:由于是全局匹配,所以可能需要^和$ by whj at 2007-5-18
    Custom : "this.Exec(value, getAttribute('regexp'))",
    // regexp是一个js函数,其返回一个正则表达式 by whj at 2007-5-18
    DynCustom : "this.TestDynaAttr(value, getAttribute('regexp'))",
    // intLen: 整数部分位数,=0或不定义,不限制整数位数;
    // decimalLen: 小数最大位数,=0或不定义,不限制小数位数。by whj at 2007-5-18
    Precision : "this.checkPrecision(value, getAttribute('intLen'), getAttribute('decimalLen'), getAttribute('notNegative'))",
    Group : "this.MustChecked(getAttribute('name'), getAttribute('min'), getAttribute('max'))",
    ErrorItem : [document.forms[0]],
    ErrorMessage : ["There are something wrong as follows: /t/t/t/t"],
    // 精简模式
    // Limit精简模式,L<max>[_<min>],如dataType="L10_2",表示最多10位,最小2位,一个中文算一位
    Ln : /^L(/d+)(_(/d+))?$/,
    // LimitB精简模式,LB<max>[_<min>],如dataType="LB10_2",表示最多10位,最小2位,一个中文算两位
    LBn : /^LB(/d+)(_(/d+))?$/,
    // Range精简模式,R<min>[_<max>],如dataType="R-1_60", 表示数据必须>-1且小于60
    Rn : /^R([-+]?/d+(/./d+)?)(_([-+]?/d+(/./d+)?))?$/,
    // Range精简模式,Ri<min>[_<max>],如dataType="Ri0_59", 表示数据必须>=0且小于等于59
    Rin : /^Ri([-+]?/d+(/./d+)?)(_([-+]?/d+(/./d+)?))?$/,
    // 整数Range精简模式,IR<min>[_<max>],如dataType="IR0_59", 表示数据必须>0且小于59,且必须是整数
    IRn : /^IR([-+]?/d+)(_([-+]?/d+))?$/,
    // 整数Range精简模式,IRi<min>[_<max>],如dataType="IRi0_59", 表示数据必须>=0且小于等于59,且必须是整数
    IRin : /^IRi([-+]?/d+)(_([-+]?/d+))?$/,
    // precision精简模式, N<intLen>[_<decimalLen>],如dataType="N0_2",表示最多2位小数
    Nn : /^N(/d+)(_(/d+))?$/,
    // precision精简模式, PN<intLen>[_<decimalLen>],如dataType="PN0_2",表示最多2位小数,且必须为正数
    PNn : /^PN(/d+)(_(/d+))?$/,
    // precision精简模式, NN<intLen>[_<decimalLen>],如dataType="NN0_2",表示最多2位小数,且必须为非负数
    NNn : /^NN(/d+)(_(/d+))?$/,
    // precision精简模式, FN<intLen>[_<decimalLen>],如dataType="FN0_2",表示必须2位小数
    FNn : /^FN(/d+)(_(/d+))?$/,
    // precision精简模式, PFN<intLen>[_<decimalLen>],如dataType="PFN0_2",表示必须2位小数,且必须为正数
    PFNn : /^PFN(/d+)(_(/d+))?$/,
    Validate : function(theForm, mode, defRequire){
        if(typeof defRequire == "undefined") defRequire = true;

        //var obj = theForm || event.srcElement; //考虑浏览器兼容,要求theForm参数必须指定,by whj 2007-6-12
        var obj = $(theForm);
        if(!isElement(obj, "form")) return false;

        var count = obj.elements.length;
        this.ErrorMessage.length = 1;
        this.ErrorItem.length = 1;
        this.ErrorItem[0] = obj;
        for(var i=0;i<count;i++){
            var fulanDataType = obj.elements[i].getAttribute("dataType");
            //alert(fulanDataType);
            if(fulanDataType == undefined){
                continue;
            }
            //alert(obj.elements[i].getAttribute("name"));//本句调试使用
            var dataTypeArray = fulanDataType.split(",");
            //由于需要同时验证两个条件,例如格式和长度的验证,所以改成可以支持多个dataType验证。
            //dataType="a,b,c"格式 by szy, 2007-9-29
            //alert(dataTypeArray.length);
            for(var j=0; j<dataTypeArray.length; j++){
                var _dataType = dataTypeArray[j];
                if(!this.validateElement(obj.elements[i], defRequire, _dataType)){
                    this.AddError(i, obj.elements[i].getAttribute("msg"));
                }
            }
        }
        if(this.ErrorMessage.length > 1){
            mode = mode || 1;
            var errCount = this.ErrorItem.length;
            switch(mode){
            case 2 :
                for(var i=1;i<errCount;i++)
                    this.ErrorItem[i].style.color = "red";
            case 1 :
                alert(this.ErrorMessage.join("/n"));
                focusIt(this.ErrorItem[1]);
                break;
            case 3 :
                for(var i=1;i<errCount;i++){
                try{
                    var span = document.createElement("SPAN");
                    span.id = "__ErrorMessagePanel";
                    span.style.color = "red";
                    this.ErrorItem[i].parentNode.appendChild(span);
                    span.innerHTML = this.ErrorMessage[i].replace(//d+:/,"");
                    }
                    catch(e){alert(e.description);}
                }
                focusIt(this.ErrorItem[1]);
                break;
            default :
                alert(this.ErrorMessage.join("/n"));
                break;
            }
            return false;
        }
        return true;
    },
    
    //2009-3-9鲁黎添加,用于前台银联注册
    ValidateRegForm : function(theForm, mode, defRequire){
        if(typeof defRequire == "undefined") defRequire = true;

        //var obj = theForm || event.srcElement; //考虑浏览器兼容,要求theForm参数必须指定,by whj 2007-6-12
        var obj = $(theForm);
        if(!isElement(obj, "form")) return false;

        var count = obj.elements.length;
        this.ErrorMessage.length = 1;
        this.ErrorItem.length = 1;
        this.ErrorItem[0] = obj;
        for(var i=0;i<count;i++){
            var fulanDataType = obj.elements[i].getAttribute("dataType");
            //alert(fulanDataType);
            if(fulanDataType == undefined){
                continue;
            }
            //alert(obj.elements[i].getAttribute("name"));//本句调试使用
            var dataTypeArray = fulanDataType.split(",");
            //由于需要同时验证两个条件,例如格式和长度的验证,所以改成可以支持多个dataType验证。
            //dataType="a,b,c"格式 by szy, 2007-9-29
            //alert(dataTypeArray.length);
            
            if ( document.getElementById("register_label") != undefined){
                document.getElementById("register_label").innerHTML = "";
            }
            if (obj.elements[i].getAttribute("name").indexOf("span_") != -1){
                document.getElementById("span_"+ obj.elements[i].getAttribute("name")).style.display = '';
            }            
            
            for(var j=0; j<dataTypeArray.length; j++){
                var _dataType = dataTypeArray[j];
                if(!this.validateElement(obj.elements[i], defRequire, _dataType)){
                //2009-3-6鲁黎添加,用于前台验证。不显示span的灰字提示信息。
                    document.getElementById("span_"+ obj.elements[i].getAttribute("name")).style.display = 'none';
                    this.AddError(i, obj.elements[i].getAttribute("msg"));
                }
            }
        }
        //alert(this.ErrorMessage.length);
        if(this.ErrorMessage.length > 1){
            mode = mode || 1;
            var errCount = this.ErrorItem.length;
            //alert(mode);
            switch(mode){
            case 2 :
                for(var i=1;i<errCount;i++)
                    this.ErrorItem[i].style.color = "red";
            case 1 :
                alert(this.ErrorMessage.join("/n"));
                focusIt(this.ErrorItem[1]);
                break;
            case 3 :
                for(var i=1;i<errCount;i++){
                try{
                    var span = document.createElement("SPAN");
                    span.id = "__ErrorMessagePanel";
                    span.style.color = "red";
                    this.ErrorItem[i].parentNode.appendChild(span);
                    span.innerHTML = this.ErrorMessage[i].replace(//d+:/,"");
                    }
                    catch(e){alert(e.description);}
                }
                focusIt(this.ErrorItem[1]);
                break;
            default :
                alert(this.ErrorMessage.join("/n"));
                break;
            }
            return false;
        }
        return true;
    },
    
    /**
     * 验证指定元素的输入是否有效
     *
     * @param e 可以是元素id或元素本身
     * @param defRequire =true,则如果没有定义require属性为"false",则为必填;
     * 否则如果没有定义reqire属性为"true",则为可选
     * @return 如果元素不存在,或者没有指定dataType,或者输入有效,返回true;
     * 否则返回false。
     */
    validateElement : function (e, defRequire, _dataType) {
        defReuire = checkTrue(defRequire, true);

        e = $(e);
        if(e == null) return true;
        if(e.disabled) return true;

        if(e.tagName == "INPUT"){
            // 只有属性中添加TrimInner的,才将内部的空格也去掉,否则只去掉前后的空格 by whj, 2007-5-10
            if(e.getAttribute("trim_inner") == "true")
                e.value = e.value.replace(//s+/g, "");
            else e.value = e.value.replace(/^/s+|/s+$/mg, "");
        }

        with(e){
            if(_dataType == null)  return true;
            
            this.ClearState(e);
            var bRequire = checkTrue(getAttribute("require"), defReuire);
            if(bRequire) {
                if(value.length == 0) return false;
            } else if(value.length == 0) return true;

            var parts = this.Ln.exec(_dataType);
            if(parts != null) return this.limit(value.length, parts[3], parts[1]);

            parts = this.LBn.exec(_dataType);
            if(parts != null) return this.limit(this.LenB(value), parts[3], parts[1]);

            parts = this.Rn.exec(_dataType);
            if(parts != null) return this.Double.test(value) && (toFloat(parts[1]) < toFloat(value) && toFloat(value) < toFloat(parts[4]));
                
            parts = this.Rin.exec(_dataType);
            if(parts != null) return this.Double.test(value) && (toFloat(parts[1]) <= toFloat(value) && toFloat(value) <= toFloat(parts[4]));
            
            parts = this.IRn.exec(_dataType);
            if(parts != null) return this.Integer.test(value) &&  (toInt(parts[1]) < (value|0) && (value|0) < toInt(parts[3]));

            parts = this.IRin.exec(_dataType);
            if(parts != null) return this.Integer.test(value) && (toInt(parts[1]) <= (value|0) && (value|0) <= toInt(parts[3]));
            
            parts = this.Nn.exec(_dataType);
            if(parts != null) return this.checkPrecision(value, toInt(parts[1]), toInt(parts[3]), false);

            parts = this.PNn.exec(_dataType);
            if(parts != null) return this.checkPrecision(value, toInt(parts[1]), toInt(parts[3]), true);
            
            parts = this.NNn.exec(_dataType);
            if(parts != null) return this.checkPrecision(value, toInt(parts[1]), toInt(parts[3])) && parseFloat(value) >= 0;

            parts = this.FNn.exec(_dataType);
            if(parts != null) return this.checkFxiedPrecision(value, toInt(parts[1]), toInt(parts[3]), false);
            
            parts = this.PFNn.exec(_dataType);
            if(parts != null) return this.checkFxiedPrecision(value, toInt(parts[1]), toInt(parts[3]), true);
            
            if(typeof(this[_dataType]) == "undefined") return true;

            switch(_dataType){
                case "IdCard" :
                case "Date" :
                case "DayHM" :
                case "DayHMS" :
                case "Repeat" :
                case "Range" :
                case "Compare" :
                case "Custom" :
                case "DynCustom" :
                case "Precision" :
                case "Group" :
                case "Limit" :
                case "LimitB" :
                case "SafeString" :
                case "Filter" :
                case "Password":
                    return eval(this[_dataType]);
                default :
                    //value = value.replace(//s+/g, "");
                    // 只有input,才trim空格, by whj, 2007-5-10
                    return this[_dataType].test(value);
            }
        }
    },
    limit : function(len,min, max){
        min = min || 0;
        max = max || Number.MAX_VALUE;
        //alert("min:"+min+", max="+max+", len"+len);
        //alert((min <= len) + " && "+ (len <= max)+" = " + (min <= len && len <= max));
        return min < len && len <= max;
    },
    LenB : function(str){
        return str.replace(/[^/x00-/xff]/g,"**").length;
    },
    ClearState : function(elem){
        with(elem){
            if(style.color == "red")
                style.color = "";
            var lastNode = parentNode.childNodes[parentNode.childNodes.length-1];
            if(lastNode.id == "__ErrorMessagePanel")
                parentNode.removeChild(lastNode);
        }
    },
    AddError : function(index, str){
        this.ErrorItem[this.ErrorItem.length] = this.ErrorItem[0].elements[index];
        this.ErrorMessage[this.ErrorMessage.length] = this.ErrorMessage.length + ":" + str;
    },
    Exec : function(op, reg){
        return new RegExp(reg,"g").test(op);
    },
    TestDynaAttr : function(op, attr){
        return new RegExp(eval(attr),"g").test(op);
    },
    checkPrecision : function(op, intLen, decimalLen, notNegative) {
        intLen = parseInt(intLen);
        if(isNaN(intLen)) intLen = 0;

        decimalLen = parseInt(decimalLen);
        if(isNaN(decimalLen)) decimalLen = 0;

        notNegative = checkTrue(notNegative, false);

        var reg = "^";
        if(!notNegative) reg += "[+//-]?";

        if(intLen > 0) {
            reg +=    "//d{1,"+intLen+"}";
        } else reg += "//d+";

        if(decimalLen > 0) {
            reg += "(//.//d{0,"+decimalLen+"})?";
        } else reg += "(//.//d+)?";

        reg += "$";

        return new RegExp(reg, "g").test(op);
    },
    checkFxiedPrecision : function(op, intLen, decimalLen, notNegative) {
        intLen = parseInt(intLen);
        if(isNaN(intLen)) intLen = 0;

        decimalLen = parseInt(decimalLen);
        if(isNaN(decimalLen)) decimalLen = 0;

        notNegative = checkTrue(notNegative, false);

        var reg = "^";
        if(!notNegative) reg += "[+//-]?";

        if(intLen > 0) {
            reg +=    "//d{"+intLen+"}";
        } else reg += "//d+";

        if(decimalLen > 0) {
            reg += "(//.//d{"+decimalLen+"})?";
        } else reg += "(//.//d+)?";

        reg += "$";

        return new RegExp(reg, "g").test(op);
    },
    compare : function(op1,operator,op2){
        switch (operator) {
            case "NotEqual":
                return (op1 != op2);
            case "GreaterThan":
                return (op1 > op2);
            case "GreaterThanEqual":
                return (op1 >= op2);
            case "LessThan":
                return (op1 < op2);
            case "LessThanEqual":
                return (op1 <= op2);
            default:
                return (op1 == op2);            
        }
    },
    MustChecked : function(name, min, max){
        var groups = document.getElementsByName(name);
        var hasChecked = 0;
        min = min || 1;
        max = max || groups.length;
        for(var i=groups.length-1;i>=0;i--)
            if(groups[i].checked) hasChecked++;
        return min <= hasChecked && hasChecked <= max;
    },
    DoFilter : function(input, filter){
return new RegExp("^.+/.(?=EXT)(EXT)$".replace(/EXT/g, filter.split(//s*,/s*/).join("|")), "gi").test(input);
    },
    IsIdCard : function(number){
        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 false;
        if(re[1] >= area.length || area[re[1]] == "") return false;
        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(!this.IsDate(date, "ymd")) return false;
        var sum = 0;
        for(var i = 0;i<=16;i++){
            sum += Ai.charAt(i) * Wi[i];
        }
        Ai +=  verify.charAt(sum%11);
        return (number.length ==15 || number.length == 18 && number == Ai);
    },
    IsIdCard1 : function(number)
{
    var factorArr = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
    var error;
    var varArray = new Array();
    var intValue;
    var lngProduct = 0;
    var intCheckDigit;
    var intStrLen = number.length;
    var idNumber = number;    
    if ((intStrLen != 15) && (intStrLen != 18)) {      
        return false;
    }    
    // check and set value
    for(i=0;i<intStrLen;i++) {
        varArray[i] = idNumber.charAt(i);
        alert(1);
        if ((varArray[i] < '0' || varArray[i] > '9') && (i != 17)) {
            return false;
        } else if (i < 17) {
            varArray[i] = varArray[i]*factorArr[i];
        }
    }
    if (intStrLen == 18) {
        //check date
        var date8 = idNumber.substring(6,14);
         alert(2);
        if (checkDate(date8) == false) {
            return false;
        }
         alert(3);       
        // calculate the sum of the products
        for(i=0;i<17;i++) {
            lngProduct = lngProduct + varArray[i];
        }        
        // calculate the check digit
         alert(4);
        intCheckDigit = 12 - lngProduct % 11;
        switch (intCheckDigit) {
            case 10:
                intCheckDigit = 'X';
                 alert(5);
                break;
            case 11:
                intCheckDigit = 0;
                 alert(6);
                break;
            case 12:
                intCheckDigit = 1;
                 alert(7);
                break;
        }        
        // check last digit
        if (varArray[17].toUpperCase() != intCheckDigit) {
         alert(8);
            return false;
        }
    }
    else{        //length is 15
        //check date
         alert(9);
        var date6 = idNumber.substring(6,12);
        if (checkDate(date6) == false) {
         alert(10);
            return false;
        }
    }
    return true;
},
    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 "symd" :
                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;
            case "ymdh" :
                m = op.match(new RegExp("^((//d{4})|(//d{2}))([-])(//d{1,2})//4(//d{1,2})//s+(//d{1,2}):(//d{1,2}):(//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));
                hour = m[7]*1;
                minute = m[8]*1;
                second = m[9]*1;
                if(hour>=24) return false;
                if(minute>=60) return false;
                if(second>=60) return false;
                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;}
    },
    IsDayHM : function(op, formatString) {
        return parseDate(op, formatString, "hm") != null;
    },
    IsDayHMS : function(op, formatString) {
        return parseDate(op, formatString, "hms") != null;
    }
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值