我正在尝试使用下面的正则表达式来验证javascript中的日期(抱歉,这有点粗鲁):
"/^(((0[1-9]|[12][0-9]|3[01])\/(0[13578]|1[02])\/((19|[2-9][0-9])[0-9]{2}))|((0[1-9]|[12][0-9]|30)\/(0[13456789]|1[012])\/((19|[2-9][0-9])[0-9]{2}))|((0[1-9]|1[0-9]|2[0-8])\/02\/((19|[2-9][0-9])[0-9]{2}))|(29\/02\/((1[6-9]|[2-9][0-9])(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/"问题是,我得到了一个未终止的括号Javascript错误。我尝试在PHP和preg_match中使用这个表达式,它工作得很好。
有点难住了,所以任何帮助都会非常感谢!
编辑:我应该补充一下,我尝试验证的日期将采用dd/mm/yyyy格式。
编辑2:对不起,我应该澄清我使用的是来自position-abolute.com (http://www.position-absolute.com/articles/jquery-form-validator-because-form-validation-is-a-mess/)的jQuery验证器。
我定义的自定义规则是:
"date":{
"regex":"/^(((0[1-9]|[12][0-9]|3[01])\/(0[13578]|1[02])\/((19|[2-9][0-9])[0-9]{2}))|((0[1-9]|[12][0-9]|30)\/(0[13456789]|1[012])\/((19|[2-9][0-9])[0-9]{2}))|((0[1-9]|1[0-9]|2[0-8])\/02\/((19|[2-9][0-9])[0-9]{2}))|(29\/02\/((1[6-9]|[2-9][0-9])(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/",
"alertText":"* Invalid date, must be in DD/MM/YYYY format."}发布于 2010-09-23 19:11:39
Firebug中没有错误。此外,regexplanet.com对此进行了很好的编译(删除了正斜杠之后)。
然而,21个捕获组--特别是如果它们是嵌套的--在JavaScript中很难是理想的方法。解析匹配结果将是一场噩梦。
我的建议是,如果可能的话,尝试将您的regexp分解为几个部分。
发布于 2010-09-23 21:25:42
感谢大家的回答。我知道使用这样一个混乱的正则表达式并不理想,但我正在使用一个现有的系统,并希望保持一致的验证方法。
无论如何,所发生的是正则表达式字符串在被计算之前被另一种方法提取,该方法删除了转义的'\‘字符('/’变成了'/')。
我能想到的最快的解决方案是将'/‘替换为'/',因为正斜杠在字符集中失去了它的特殊含义。正则表达式现在看起来像这样:
/^(((0[1-9]|[12][0-9]|3[01])[/](0[13578]|1[02])[/]((19|[2-9][0-9])[0-9]{2}))|((0[1-9]|[12][0-9]|30)[/](0[13456789]|1[012])[/]((19|[2-9][0-9])[0-9]{2}))|((0[1-9]|1[0-9]|2[0-8])[/]02[/]((19|[2-9][0-9])[0-9]{2}))|(29[/]02[/]((1[6-9]|[2-9][0-9])(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/希望这是有意义的,再次感谢!
发布于 2010-09-23 19:13:59
使用/MyRegex/或新的RegExp("myRegex")
https://stackoverflow.com/questions/3777630
复制相似问题