我有以下正则表达式,它在我的应用程序代码中工作得很好,其他代码编辑器没有报告它的问题。用于验证密码。
/^(?=.*[A-Za-z])+(?=.*[d])+(?=.*[^A-Za-zds])+.*$/
也就是说:
必须有一个字母必须是一个数字必须有一个非字母,非数字
现在看来netbeans有一个相当不错的正则表达式解析器,它已经报告了这是一个错误的声明。但由于我是regex的新手,我无法发现错误。这是由于使用正向前看的?=
与一个或多个+
在最后?
当我拿出+
错误消失,但regex停止在我的应用程序执行。
如果有人能告诉我我的表达有什么问题,那就太好了。
该语句用于我使用的jQuery验证插件,如果有帮助的话。另外,由于我使用的是插件,我不希望把它分成几个更小的(显然更简单、更清晰)表达式。这将需要大量的工作。
将量词应用于零宽度断言(例如forward)是没有意义的。这种断言的全部意义在于,它们允许您断言某些条件为真,而不消耗任何文本——也就是说,推进当前匹配位置。一些正则表达式将其视为语法错误,而另一些则有效地忽略了量词。去掉这些加号会使你的正则表达式正确:
/^(?=.*[A-Za-z])(?=.*d)(?=.*[^A-Za-zds]).*$/
如果它不像预期的那样工作,你可能会遇到臭名昭著的IE向前看的错误。通常的解决方法是重新排序,使第一个前瞻性锚定在最后,像这样:
/^(?=.{8,15}$)(?=.*[A-Za-z])(?=.*d)(?=.*[^A-Za-zds]).*/
(?=.{8,15}$)
只是一个例子;我不知道你真正的需求是什么。如果您确实想要施加最小和最大长度限制,那么这里是执行此操作的理想位置。