为什么这个正则表达式"^(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这样的日期失败了.?

1 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])$
Run Code Online (Sandbox Code Playgroud)

正则表达式,但我观察到这个正则表达式在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);
Run Code Online (Sandbox Code Playgroud)

对于像16/06/2008res的日期评估为null.

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

And*_*ykh 9

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