我始终没有找到完美的日期验证正则表达式,这要问题就是对瑞年的判断。 
我们知道,每 400 年会有 97 个闰年(参见高中《地理》课本),完整的瑞年判断是这样的:
瑞年的年份
1) 若是整百年,能被 400 整除
否则
2) 能被 4 整除
    <script language="javascript" type="text/javascript">
        // 分隔符
        Separator = {
            ANY: ".",
            DASH: "-",
            DOT: "\\.",
            SLASH: "/"
        };

        String.prototype.isDate = function(sep)
        { 
            var reStr = "^(((([0-9]{2}(([2468][048])|([02468][48])|([13579][26])))|((([02468][048])|([13579][26]))(00)))(-)(2|02)(-)(([0]?[1-9])|([1-2][0-9])))|((([0-9]{2}([02468][1235679])|([13579][01345789]))|((([02468][1235679])|([13579][01345789]))(00)))(-)(2|02)(-)(([0]?[1-9])|([1][0-9])|([2][0-8])))|(([0-9]{4})(-)(((([0]?(1|3|5|7|8))|(10|12))(-)(([0]?[1-9])|([1-2][0-9])|30|31))|(((([0]?(4|6))|11))(-)(([0]?[1-9])|([1-2][0-9])|30)))))$";

            if(typeof(sep) == "string")
                reStr = reStr.replace(/\(-\)/g, "(" + sep + ")");
            var re = new RegExp(reStr, "g");
            return re.test(this); 
        };
        
        function check()
        {
            var bb = document.getElementById("TextBox1").value;

            //alert(bb.isDate());   
            //alert(bb.isDate(Separator.ANY)) ;
            //alert(bb.isDate(Separator.DASH)) ;
            //alert(bb.isDate(Separator.DOT)) ;
            alert(bb.isDate(Separator.SLASH));
        }
    </script>
本篇文章为转载,来自:GisCell的blogs   http://blog.csdn.net/giscell/archive/2007/06/22/1662209.aspx
我们知道,每 400 年会有 97 个闰年(参见高中《地理》课本),完整的瑞年判断是这样的:
瑞年的年份
1) 若是整百年,能被 400 整除
否则
2) 能被 4 整除
下面给出代码,主要是为 String 原型添加 isDate 方法:
下面的正则表达式可以看成是由三个正则表达式拼接而成,瑞年二月判断、非闰年二月判断、其它月份判断。
    <script language="javascript" type="text/javascript">
        // 分隔符
        Separator = {
            ANY: ".",
            DASH: "-",
            DOT: "\\.",
            SLASH: "/"
        };
        String.prototype.isDate = function(sep)
        { 
            var reStr = "^(((([0-9]{2}(([2468][048])|([02468][48])|([13579][26])))|((([02468][048])|([13579][26]))(00)))(-)(2|02)(-)(([0]?[1-9])|([1-2][0-9])))|((([0-9]{2}([02468][1235679])|([13579][01345789]))|((([02468][1235679])|([13579][01345789]))(00)))(-)(2|02)(-)(([0]?[1-9])|([1][0-9])|([2][0-8])))|(([0-9]{4})(-)(((([0]?(1|3|5|7|8))|(10|12))(-)(([0]?[1-9])|([1-2][0-9])|30|31))|(((([0]?(4|6))|11))(-)(([0]?[1-9])|([1-2][0-9])|30)))))$";
            if(typeof(sep) == "string")
                reStr = reStr.replace(/\(-\)/g, "(" + sep + ")");
            var re = new RegExp(reStr, "g");
            return re.test(this); 
        };
        
        function check()
        {
            var bb = document.getElementById("TextBox1").value;
            //alert(bb.isDate());   
            //alert(bb.isDate(Separator.ANY)) ;
            //alert(bb.isDate(Separator.DASH)) ;
            //alert(bb.isDate(Separator.DOT)) ;
            alert(bb.isDate(Separator.SLASH));
        }
    </script>
                    
                


                
            
        
浙公网安备 33010602011771号