首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript中的正则表达式出现未终止的括号错误

Javascript中的正则表达式出现未终止的括号错误
EN

Stack Overflow用户
提问于 2010-09-23 19:00:03
回答 4查看 6.7K关注 0票数 1

我正在尝试使用下面的正则表达式来验证javascript中的日期(抱歉,这有点粗鲁):

代码语言: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验证器。

我定义的自定义规则是:

代码语言:javascript
运行
复制
"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."}
EN

回答 4

Stack Overflow用户

发布于 2010-09-23 19:11:39

Firebug中没有错误。此外,regexplanet.com对此进行了很好的编译(删除了正斜杠之后)。

然而,21个捕获组--特别是如果它们是嵌套的--在JavaScript中很难是理想的方法。解析匹配结果将是一场噩梦。

我的建议是,如果可能的话,尝试将您的regexp分解为几个部分。

票数 1
EN

Stack Overflow用户

发布于 2010-09-23 21:25:42

感谢大家的回答。我知道使用这样一个混乱的正则表达式并不理想,但我正在使用一个现有的系统,并希望保持一致的验证方法。

无论如何,所发生的是正则表达式字符串在被计算之前被另一种方法提取,该方法删除了转义的'\‘字符('/’变成了'/')。

我能想到的最快的解决方案是将'/‘替换为'/',因为正斜杠在字符集中失去了它的特殊含义。正则表达式现在看起来像这样:

代码语言: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))))$/

希望这是有意义的,再次感谢!

票数 1
EN

Stack Overflow用户

发布于 2010-09-23 19:13:59

使用/MyRegex/或新的RegExp("myRegex")

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3777630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档