正则表达式的有效日期

时间:2014-02-01 09:18:06

标签: regex

在公历中,如果一年可以被400整除,那么它就是闰年。 2000年是2100年没有的闰年。如何仅使用正则表达式构造实现(if year % 400 == 0)?使用if else语句的实现将被视为无效,因为这将在外部处理。该解决方案将验证2月份是28天还是29天。我的问题涉及4位数年份(从1000开始),但任何一般解决方案的指南也会非常有用。

编辑:没关系。找到指南。 http://regexadvice.com/blogs/mash/archive/2004/04/02/Dealing-with-dates-and-leap-years.aspx

1 个答案:

答案 0 :(得分:0)

试试这个正则表达式

  

它将匹配闰年。

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

匹配

  

mm / dd / yyyy,m / dd / yyyy,mm,d / yyyy和m / d / yyyy

Check Here