为什么我的JavaScript RegExp不能按预期工作

时间:2014-05-23 16:13:28

标签: javascript regex

我正在编写密码屏幕,密码安全性的要求长度介于8到20个字符之间,必须至少包含 一个Alpha字符且至少一个数字字符和至少 [!@#$%^&*]的一个特殊字符。

我拼凑了这个正则表达式,它似乎在C#中工作,但是当我开始重写JavaScript验证的代码时,正则表达式将我认为有效密码标记为无效。

这是正则表达式,因为我将它分配给RegExp:

var regExPatt = new RegExp('^(?=(?:.*[a-zA-Z]){1})(?=(?:.*\d){1})(?=(?:.*[!@@#$%^&*]){1})(?!.*\s).{8,20}$');

注意BENE:@@符号用于将@符号放入RegExp,否则它会尝试处理部分字符串,如Razor变量和东西横向移动快。

这个正则表达式在哪里出错了?我知道这很复杂。

有效的密码:

freddy1234%
freddy123$5
freddy12#45
freddy1@345
freddy!2345

不起作用的密码:

test1234%
wilma1234%

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

JavaScript开发人员应该了解

想要使用正面或负面预测的开发人员应该考虑到这需要JavaScript v1.5,因为它可以在页面New in JavaScript 1.5上阅读。但是现在这应该没问题,因为这是2000年11月发布的一个非常旧的版本,现在使用的所有浏览器都支持JavaScript的v1.5。

JavaScript支持Lookbehind(JavaScript v1.8.5)。

JavaScript版本列表以及哪些浏览器支持哪些JavaScript版本可以在Wikipedia页面上找到JavaScript

New in JavaScript包含指向页面的链接,说明在哪个版本的JavaScript中添加了什么。