RegEx日期格式MM / DD / YYYY

时间:2015-02-25 18:52:24

标签: regex

任何人都可以告诉我这个regEx是否有问题:

/^(0[1-9]|1[0-2])\/(19|20)\d{2}$/

我试图通过MM / DD / YYYY为日期创建一个regEx,我认为这会削减它但是由于某种原因它仍然说正确的日期是无效的。

例如02/15/2015,01/31/2013等。任何应该有效的日子都没有被验证,所以我认为这个regEx没有做我希望它做的事情......

有人会看一下它,看看我可能搞砸了吗?

2 个答案:

答案 0 :(得分:3)

这适用于RegexBuddy,使用它的默认PCRE方言:

(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)[0-9]{2}

成功匹配

01/01/2014
12/31/2000
07/15/1955
01-01-2012
12.22.1922

<失败(正确)

13/01/2001
12/33/2015
01/01/1200
15.36.1948
01.50.1922

答案 1 :(得分:-1)

可能这不应该由正则表达式解决,主要是由于闰年引起的并发症。无论如何,通过接受2月29日的所有年份并仅考虑20和21世纪的日期来忽略这个问题,我们有(pcre语法;分成多行以便于理解。通过消除一行中的所有前导空格折叠成一行):

/^
   (
       (0[13578]|1[02])\/(0[1-9]|[12][0-9]|3[01])
     | (0[469]|11)\/(0[1-9]|[12][0-9]|30)
     | 02\/(0[1-9]|[12][0-9])
   )
   \/(19|20)\d{2}
$/x

Live test on regex 101