是否可以简化此密码正则表达式?

时间:2015-10-09 17:21:01

标签: javascript regex

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

jQuery method to validate a password with specific rules

目标是创建一个采用以下

的正则表达式
  • 一个或多个大写字符
  • 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);
});

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

1 个答案:

答案 0 :(得分:6)

您可以使用正向前瞻(?=..)

/^(?=.*[A-Z])(?=.*[a-z])(?=.*[\d\W]).{7,}$/

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

希望它有所帮助。