【发布时间】:2014-05-24 06:37:39
【问题描述】:
我正在编写密码屏幕,密码安全性要求长度在 8 到 20 个字符之间,必须包含至少一个字母字符和至少 一个数字字符和至少一个[!@#$%^&*] 的特殊字符。
我拼凑了这个正则表达式,它似乎在 C# 中工作,但是当我开始重写 JavaScript 验证代码时,正则表达式将我认为有效的密码标记为无效。
这是我分配给 RegExp 的正则表达式:
var regExPatt = new RegExp('^(?=(?:.*[a-zA-Z]){1})(?=(?:.*\d){1})(?=(?:.*[!@@#$%^&*]){1})(?!.*\s).{8,20}$');
注意事项:双 @@ 符号用于将 @ 符号放入正则表达式,否则它会尝试处理像 Razor 变量这样的部分字符串,并且事情会快速横向发展。
这个正则表达式哪里出错了?我知道这相当复杂。
有效的密码:
freddy1234%
freddy123$5
freddy12#45
freddy1@345
freddy!2345
无效的密码:
test1234%
wilma1234%
有什么想法吗?
【问题讨论】:
-
因此,这不允许使用空格、圆括号、(半)冒号、竖线、问号、尖括号、破折号、下划线、等号、加号、斜杠、句点、逗号、还是波浪号?这可能会让一些用户感到沮丧,因为其中大部分似乎都是符号。考虑到迭代字符串需要多少时间/精力,我会这样做而不是限制正则表达式。
-
这是正确的科里。我也许可以说服用户允许这些字符。但是,我仍然不明白为什么 freddy* 有效而 wilma* 无效。有什么想法吗?
-
感谢 Biffen 的格式化帮助。
-
@user3669641 正则表达式是否在 html 代码中正确呈现?你能在浏览器中查看页面的源代码吗?
-
我认为,我刚刚有一个解释它的评论。 JavaScript 不允许环视语法。上面的正则表达式是建立在哪个之上的。我只是把它分成 4 个不同的正则表达式并设置它来解决这种情况。谢谢大家的帮助。
标签: javascript regex