验证日期的正则表达式在二月份不起作用

时间:2014-02-05 16:29:56

标签: javascript regex date

我有这个正则表达式作为日期验证的一部分。屏幕界面提示以dd-mm-yyyy格式输入日期。

然而,我们的正则表达式将2月日期与假日匹配。作为正则表达式的新手,我完全无法解决这个问题,主要是为什么会出现问题?

这是正则表达式:

/^(((0[1-9]|[12]\d|3[01])\-(0[13578]|1[02])\-((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\-(0[13456789]|1[012])\-((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\-((19|[2-9]\d)\d{2}))|(29\-02\-((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/

编辑:这是由我们的网络应用程序中的其他人编写的,一旦出现问题我就注意到了这一点。

2 个答案:

答案 0 :(得分:2)

出于某种原因,这个正则表达式在2月份的日期和月份之间需要/,我认为这是一个错字。

/^(((0[1-9]|[12]\d|3[01])\-(0[13578]|1[02])\-((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\-(0[13456789]|1[012])\-((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\-02\-((19|[2-9]\d)\d{2}))|(29\-02\-((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/
                                                                                                                                                       ^

答案 1 :(得分:1)

这是一种非常糟糕的验证日期的方法,但问题非常明显:正则表达式在2月日期的日期和月份之间匹配/,而应该匹配-。 (闰年的二月日期工作正常。)

正则表达式中所有反斜杠引用的-字符都可以没有反斜杠;它没有必要。

/^(((0[1-9]|[12]\d|3[01])-(0[13578]|1[02])-((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)-(0[13456789]|1[012])-((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])-02-((19|[2-9]\d)\d{2}))|(29-02-((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/

迫使人们为了方便您的软件而构建特定的日期格式并不是很周到。