在网上搜索有关日期YYYY-MM-DD的正则表达式出现不少标题为<<一个特牛的日期时间判断正则表达式>>的连接,本人也采用了,但是在
08年2月29日时,正好测试页面,不经意间就选择了当天的日期,结果RegularExpressionValidator显示了错误提示,于是我自己觉得很纳闷,
WHY,难道"特牛"的有问题?于是再次测试果然......无语中...算了,还是自己修改一下吧,反正应该不是很难,于是看了看正则表达式的
资料,分析"特牛"的内容,自己做了一些修改和添加,现在这个应该就不错了,应该叫"特牛++"

表达式测试范围为1600到9999年

^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|   /*平年闰年1 35 7  8 10 12月*/ 
    (((1[6-9]|[2-9]\d)\d{2})-(0?[469]|11)-(0?[1-9]|[12]\d|30))|                  /*平年闰年4 6 9 11月*/
    (((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|                /*平年2月*/
    (((1[6-9]|[2-9]\d)[13579][26])-0?2-29)|            /*经过分析只要一个整数的最后两位数能被4整除那么这个数就可以被4整除,于是有了下面五行*/
    (((1[6-9]|[2-9]\d)[2468][048])-0?2-29)|
    (((1[6-9]|[2-9]\d)0[48])-0?2-29)|
    (([13579]6)00-0?2-29)|
    (([2468][048])00-0?2-29)|
    (([3579]2)00-0?2-29))$

月份天数如果是一位数加不加零都可以的版本:
^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[469]|11)-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)[13579][26])-0?2-29)|(((1[6-9]|[2-9]\d)[2468][048])-0?2-29)|(((1[6-9]|[2-9]\d)0[48])-0?2-29)|(([13579]6)00-0?2-29)|(([2468][048])00-0?2-29)|(([3579]2)00-0?2-29))$

月份天数如果是一位数必须加零的版本:
^((((1[6-9]|[2-9]\d)\d{2})-(0[13578]|1[02])-(0[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0[469]|11)-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-02-(0[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)[13579][26])-02-29)|(((1[6-9]|[2-9]\d)[2468][048])-02-29)|(((1[6-9]|[2-9]\d)0[48])-02-29)|(([13579]6)00-02-29)|(([2468][048])00-02-29)|(([3579]2)00-02-29))$


HappyCoding

 

2009年6月2日11:24:50

发现上面的有问题修改如下:

 

 

        -- 月份和日子前面可以有零
        ((1[6-9]|[2-9]\d)(\d{2})-((0?[13578])|(1[02]))-((0?[1-9])|([12]\d)|(3[01])))  /*全年为大的月份;*/
        ((1[6-9]|[2-9]\d)(\d{2})-((0?[469])|11)-((0?[1-9])|([12]\d)|30))                  /*全年为小的月份;*/
        ((1[6-9]|[2-9]\d)(\d{2})-0?2-((0?[1-9])|(1\d)|(2[0-8])))                             /*所有年的二月份;*/
        ((1[6-9]|[2-9]\d)([13579][26])-0?2-29)                                                  /*经过分析只要一个整数的最后两位数能被4整除那么这个数就可以被4整除,于是有了下面五行*/
        ((1[6-9]|[2-9]\d)([2468][048])-0?2-29)
        ((1[6-9]|[2-9]\d)(0[48])-0?2-29)
        ([13579]600-0?2-29)
        ([2468][048]00-0?2-29)
     ([3579]200-0?2-29)

 

^(((1[6-9]|[2-9]\d)(\d{2})-((0?[13578])|(1[02]))-((0?[1-9])|([12]\d)|(3[01])))|((1[6-9]|[2-9]\d)(\d{2})-((0?[469])|11)-((0?[1-9])|([12]\d)|30))|((1[6-9]|[2-9]\d)(\d{2})-0?2-((0?[1-9])|(1\d)|(2[0-8])))|((1[6-9]|[2-9]\d)([13579][26])-0?2-29)|((1[6-9]|[2-9]\d)([2468][048])-0?2-29)|((1[6-9]|[2-9]\d)(0[48])-0?2-29)|([13579]600-0?2-29)|([2468][048]00-0?2-29)|([3579]200-0?2-29))$


posted on 2008-04-10 12:59  josephshi  阅读(1001)  评论(0编辑  收藏  举报