您的位置:首页 > 其它

"一个特牛的日期时间判断正则表达式"--我的修改版

2008-04-10 12:59 519 查看
在网上搜索有关日期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))$
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: