比较完美的日期验证正则表达式(2011-6-1更新)

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

  我们知道,每 400 年会有 97 个闰年(参见高中《地理》课本),完整的瑞年判断是这样的:
  瑞年的年份
  1) 若是整百年,能被 400 整除
  否则
  2) 能被 4 整除

下面给出代码,主要是为 String 原型添加 isDate 方法:

<script 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|9))|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);
};
alert("2100-2-29".isDate());   
alert("2000/02/29".isDate(Separator.SLASH));
alert("2007/5/22".isDate(Separator.SLASH));
alert("2007-09-31".isDate());
alert("2004.02.29".isDate(Separator.DOT));
alert("2008-02-29".isDate());
// 结果
// false
// true
// true
// false
// true
// true
</script>

上面的正则表达式可以看成是由三个正则表达式拼接而成,瑞年二月判断、非闰年二月判断、其它月份判断。

 

2011-6-1更新:漏掉了9月份的日期判断

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值