0

我有以下正则表达式在我的应用程序代码中运行良好,其他代码编辑器没有报告它的问题。它用于验证密码。

/^(?=.*[A-Za-z])+(?=.*[\d])+(?=.*[^A-Za-z\d\s])+.*$/

换句话说:

必须有一个字母 必须有一个数字 必须有一个非字母、非数字

现在看来 netbeans 有一个相当不错的正则表达式解析器,它报告说这是一个错误的陈述。但由于我是正则表达式的新手,我无法发现错误。是因为最后使用?=了一个或多个的正向前瞻+吗?

当我取出+错误时,错误消失了,但正则表达式停止在我的应用程序中执行。

如果有人能告诉我我的表达有什么问题,那就太好了。

如果有帮助,该语句用于我使用的 jQuery 验证插件中。同样由于我使用的是插件,我不希望将其拆分为几个更小的(显然更简单和更清晰)的表达式。这将需要大量的工作。

4

1 回答 1

1

将量词应用于诸如前瞻之类的零宽度断言是毫无意义的。此类断言的全部意义在于,它们允许您断言某些条件为真,而无需消耗任何文本——即推进当前匹配位置。一些正则表达式风格将其视为语法错误,而另一些则有效地忽略了量词。摆脱那些加号使您的正则表达式正确:

/^(?=.*[A-Za-z])(?=.*\d)(?=.*[^A-Za-z\d\s]).*$/

如果它没有按预期工作,您可能会遇到臭名昭著的 IE 前瞻错误。通常的解决方法是对事物进行重新排序,以便将第一个前瞻固定在最后,如下所示:

/^(?=.{8,15}$)(?=.*[A-Za-z])(?=.*\d)(?=.*[^A-Za-z\d\s]).*/

(?=.{8,15}$)只是一个例子;我不知道你的真正要求是什么。如果您确实想施加最小和最大长度限制,这是执行此操作的理想场所。

于 2013-05-20T07:24:56.303 回答