码迷,mamicode.com
首页 > 其他好文 > 详细

日期格式验证

时间:2015-11-18 16:10:27      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

日期格式yyyyMMdd正则表达式:    
  var reg = /^([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]|[0-9][1-9][0-9]{2}|[1-9][0-9]{3})((0[13578]|10|12)(0[1-9]|1[0-9]|2[0-9]|3[01])|(0[469]|11)(0[1-9]|1[0-9]|2[0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))|(((0[48]|[13579][26]|[2468][048])000209)|([0-9]{2}(0[48]|[13579][26]|[2468][048])0209))$/;  //已做测试
 
 

用正则表达式如何判断日期yyyyMMdd。日期判断涉及到闰年平年的判断,大月小月的判断等。由于好久没用正则表达式了,所以只能一步一步的来实现日期的判断。最后竟成功了,下面分享一下这个过程。

         首先,我想到的是大月的判断。1,3,5,7,8,10,12这几个月都是31天,有相似之处,但是又稍有不同。

(0[13578]|10|12)(0[1-9]|1[0-9]|2[0-9]|3[01])                   //前一个括号是月的判断,后一个括号是日期的判断

测试了一下成功了,接下来进行小月的判断,30天的月份有4,6,9,11。与判断大月基本类似:

(0[469]|11)(0[1-9]|1[0-9]|2[0-9]|30)                                  

然后判断2月份,先考虑28天的情况

02(0[1-9]|1[0-9]|2[0-8]) 

现在月份和日期都判断完了,再考虑年的情况。这里年的范围是00019999。判断的正则表达式为:

[0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]|[0-9][1-9][0-9]{2}|[1-9][0-9]{3}< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />

然后考虑闰年的情况,闰年又分为两种情况,一种是正百年能够被400整除,另一种是非整百年能被4整除。整百年的情况,主要是前两位:04,08;头一位是偶数的,[2468][048];头一位是奇数的,[13579][26]:

(0[48]|[13579][26]|[2468][048])00

         另一种闰年的情况,非百年能被4整除的年,主要是考虑后两位能被4整除,与上面的类似也分奇偶:

[0-9]{2}(0[48]|[13579][26]|[2468][048])

         将闰年的合并:

((0[48]|[13579][26]|[2468][048])00)|([0-9]{2}(0[48]|[13579][26]|[2468][048]))

 

现在所有的条件都考虑了,剩下的就是合并了。

不考虑闰年的229号的情况:

([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]|[0-9][1-9][0-9]{2}|[1-9][0-9]{3})((0[13578]|10|12)(0[1-9]|1[0-9]|2[0-9]|3[01])|(0[469]|11)(0[1-9]|1[0-9]|2[0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))

考虑了闰年的229号的最终表达式为:

([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]|[0-9][1-9][0-9]{2}|[1-9][0-9]{3})((0[13578]|10|12)(0[1-9]|1[0-9]|2[0-9]|3[01])|(0[469]|11)(0[1-9]|1[0-9]|2[0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))|(((0[48]|[13579][26]|[2468][048])000209)|([0-9]{2}(0[48]|[13579][26]|[2468][048])0209

日期格式验证

标签:

原文地址:http://www.cnblogs.com/zhangyong123/p/4974560.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!