【问题标题】:Why does my JavaScript RegExp not work as expected为什么我的 JavaScript RegExp 不能按预期工作
【发布时间】: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


【解决方案1】:

JavaScript 开发人员应该了解

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

JavaScript 尚不支持 Lookbehind (JavaScript v1.8.5)。

JavaScript 版本列表以及哪个浏览器支持哪个 JavaScript 版本可以在关于 JavaScript 的维基百科页面上找到。

New in JavaScript 包含指向解释在哪个 JavaScript 版本中添加的内容的页面的链接。

【讨论】:

    猜你喜欢
    • 2016-11-11
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 2020-01-10
    • 2021-05-30
    • 2020-03-05
    相关资源
    最近更新 更多