[转载]比较完美的日期验证正则表达式(已修正)

我始终没有找到完美的日期验证正则表达式,这要问题就是对瑞年的判断。

我们知道,每 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>
本篇文章为转载,来自:GisCell的blogs   http://blog.csdn.net/giscell/archive/2007/06/22/1662209.aspx
原文地址:https://www.cnblogs.com/puke/p/850347.html