我有这个正则表达式作为日期验证的一部分。屏幕界面提示以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))))$/
编辑:这是由我们的网络应用程序中的其他人编写的,一旦出现问题我就注意到了这一点。
答案 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))))$/
迫使人们为了方便您的软件而构建特定的日期格式并不是很周到。