是否有可能简化这个密码正则表达式

Is it possible to simplify this password regex?

本文关键字:密码 正则表达式 有可能 是否      更新时间:2023-09-26

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

使用特定规则验证密码的jQuery方法

目标是创建一个接受以下 的正则表达式
  • 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);
});

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

您可以使用正面查找(?=..):

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

每一个正向前看将确保存在于您指定字符的任何位置。最终的.{7,}将匹配至少7个字符。从开始^到结束$ .

希望能有所帮助。