为什么这个正则表达式“^(0 [1-9] | 1 [0-9] | 2 [0-9] | 3 [01])/(0 [1-9] | 1 [012])/(19 [ 0-9] {2} | 20 [0-1] [0-7])$“对于像16/06/2008,21/02/2008这样的日期失败了。?

时间:2017-09-13 18:53:22

标签: javascript regex

我试图使用此

以dd / mm / yyyy格式匹配从1900年到2017年的日期
^(0[1-9]|1[0-9]|2[0-9]|3[01])/(0[1-9]|1[012])/(19[0-9]{2}|20[0-1][0-7])$

正则表达式,但我观察到这个正则表达式在16/06/2008和21/02/2008等日期失败 为了确保这个正则表达式的所有部分都正常工作,我在几个月和几年的不同日子里尝试了所有三个部分,例如^(0[1-9]|1[0-9]|2[0-9]|3[01])$^(0[1-9]|1[012])$^(19[0-9]{2}|20[0-1][0-7])$,但我找到了这些工作正常,但当我运行它时,我得到了与16/06/2008相同的意外结果。

此外,我想通知您,我在javascript中使用此正则表达式:

var patt = new RegExp("^(0[1-9]|1[0-9]|2[0-9]|3[01])/(0[1-9]|1[012])/(19[0-9]{2}|20[0-1][0-7])$");
var res = patt.exec(datestring);

对于16/06/2008等日期,res的计算结果为null。

请让我知道我哪里出错了? 为了解决这个问题,我已经完成了一些正则表达式教程和之前提出的问题,但我没有找到任何可以告诉我为什么这个正则表达式在某些特定日期失败的相关答案。请帮忙。

2 个答案:

答案 0 :(得分:9)

因为2008年不匹配20 [0-1] [0-7]

答案 1 :(得分:0)

一起
20[0-1][0-7]

与2008年不匹配(8不在[0-7]范围内)你可能还想通过使用反斜杠来逃避正则表达式中的正斜杠

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