Javascript 可以简化这个密码正则表达式吗?

Javascript 可以简化这个密码正则表达式吗?,javascript,regex,Javascript,Regex,我刚才回答了另一个正则表达式问题 目标是创建一个正则表达式,该正则表达式包含以下内容 1个或多个大写字符 1个或多个小写字符 1位或特殊字符-即!@$%^&*()-=等 长度必须至少为7个字符 我找到了一个非常好的解决方案,用于匹配非单词字符的\W特殊字符。应该与特殊字符匹配 但我想知道这个解决方案是否可以简化为不需要多个条件。我最初的解决方案是一行 $.validator.addMethod("pwcheck", function(value) { return /[A-Z]+[

我刚才回答了另一个正则表达式问题

目标是创建一个正则表达式,该正则表达式包含以下内容

  • 1个或多个大写字符
  • 1个或多个小写字符
  • 1位或特殊字符-即
    !@$%^&*()-=
  • 长度必须至少为7个字符
我找到了一个非常好的解决方案,用于匹配非单词字符的
\W
特殊字符。应该与特殊字符匹配

但我想知道这个解决方案是否可以简化为不需要多个条件。我最初的解决方案是一行

$.validator.addMethod("pwcheck", function(value) {
    return /[A-Z]+[a-z]+[\d\W]+/.test(value)
});
这符合前三个条件,但有一个问题。它只按照那个确切的顺序匹配。这意味着小写必须跟在大写之后,依此类推。这样的例子已经过去了

AGHjfd8437
其他人就这样失败了

agTF8djRd4
我不得不修改我的解决方案以通过这样的测试。这就是我想到的

$.validator.addMethod("pwcheck", function(value) {
    return /[A-Z]+/.test(value) && /[a-z]+/.test(value) && 
    /[\d\W]+/.test(value) && /\S{7,}/.test(value);
});

但我想知道这是否可以合并到一个正则表达式中。如果是这样的话,它会比第二个看起来更干净吗?

你可以使用正面的lookaheads
(?=…)

每个正向前瞻将确保存在于指定角色的任何位置。最后的
{7,}
将至少匹配七个字符。从开始到结束


希望有帮助。

您可以使用正面外观头
(?=…)

每个正向前瞻将确保存在于指定角色的任何位置。最后的
{7,}
将至少匹配七个字符。从开始到结束


希望有帮助。

lookaheads在IMO中使用不足。我需要更好地使用它们。我自己的Lookaheaunds是一个很好的解决方案。lookaheads在IMO中使用不足。我需要更好地使用它们。我自己的Lookaheaunds是一个很好的解决方案。FWIW,我认为您现有的代码比将所有内容放在一个正则表达式中的建议解决方案更清晰。因此,这取决于您的个人编码目标,哪一个更好。我把易于维护和清晰性放在优先位置,让所有可能在后面阅读此代码的人都能看到,而不是我自己。单独检查密码失败的原因不是更好吗?我讨厌当网站去“密码无效”,我不知道为什么从他们的100件事,需要在它。我同意上述评论。我不知道为什么人们会觉得必须把所有的东西都放在一个正则表达式中。我更愿意做一个简单的解析器,就像@epascarello所说的,给出它失败的原因。说真的,为什么会被否决?这个问题比发布的许多其他垃圾问题要好得多?FWIW,我认为您现有的代码比将所有内容放在一个正则表达式中的建议解决方案更清晰。因此,这取决于您的个人编码目标,哪一个更好。我把易于维护和清晰性放在优先位置,让所有可能在后面阅读此代码的人都能看到,而不是我自己。单独检查密码失败的原因不是更好吗?我讨厌当网站去“密码无效”,我不知道为什么从他们的100件事,需要在它。我同意上述评论。我不知道为什么人们会觉得必须把所有的东西都放在一个正则表达式中。我更愿意做一个简单的解析器,就像@epascarello所说的,给出它失败的原因。说真的,为什么会被否决?这个问题比贴出的许多其他垃圾问题要好得多?
/^(?=.*[A-Z])(?=.*[a-z])(?=.*[\d\W]).{7,}$/