正则表达式用于检查是否存在4个不同字符组中的至少3个

Yon*_*der 16 javascript regex passwords

我正在尝试编写密码验证器.

如何查看我提供的字符串是否包含至少3个不同的字符组?

它很容易检查它们是否存在 - 但至少3个?

  • 至少八(8)个字符

  • 至少三个不同的角色组

    大写字母

    小写字母

    数字

    特殊字符!@#$%&/ =?_.,:; - \

(我正在使用javascript进行正则表达式)

Bar*_*ers 23

只是为了学习 - 这种要求是否可以在纯正则表达式中实现?

这使得它难以阅读(并因此维护!)解决方案,但这里是:

(?mx)
^
(
  (?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])                # must contain a-z, A-Z and 0-9
  |                                                # OR
  (?=.*[a-z])(?=.*[A-Z])(?=.*[!@\#$%&/=?_.,:;\\-]) # must contain a-z, A-Z and special
  |                                                # OR
  (?=.*[a-z])(?=.*[0-9])(?=.*[!@\#$%&/=?_.,:;\\-]) # must contain a-z, 0-9 and special
  |                                                # OR
  (?=.*[A-Z])(?=.*[0-9])(?=.*[!@\#$%&/=?_.,:;\\-]) # must contain A-Z, 0-9 and special
)
.{8,}                                              # at least 8 chars
$
Run Code Online (Sandbox Code Playgroud)

一个(可怕的)Javascript演示:

var pw = "aa$aa1aa";
if(pw.match(/^((?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])|(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%&\/=?_.,:;\\-])|(?=.*[a-z])(?=.*[0-9])(?=.*[!@#$%&\/=?_.,:;\\-])|(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%&\/=?_.,:;\\-])).{8,}$/)) {
  print('Okay!');
} else {
  print('Fail...');
}
Run Code Online (Sandbox Code Playgroud)

print :,Okay!你可以在Ideone看到.


Bra*_*tie 9

也可以加入乐趣:

String.prototype.isValidPW = function(){   
    // First, check for at least 8 characters
    if (this.length < 8) return false;

    // next, check that we have at least 3 matches
    var re = [/\d/, /[A-Z]/, /[a-z]/, /[!@#$%&\/=?_.,:;-]/], m = 0;
    for (var r = 0; r < re.length; r++){
        if ((this.match(re[r]) || []).length > 0) m++;
    }

    return m >= 3;
};

if ("P@ssW0rd".isValidPW()) alert('Acceptable!');
Run Code Online (Sandbox Code Playgroud)

演示


Ksh*_*KJ- 5

我假设你将使用不同的正则表达式来满足不同的要求.在这种情况下,请告诉我以下是否适合您:

var e = password.match(/.{8,}/); //At least 8 chars

var a = password.match(/[0-9]+/); //numeric
var b = password.match(/[A-Z]+/); //Capitals
var c = password.match(/[a-z]+/); //small letters
var d = password.match(/[!@#\$%&/=?_.,:;-\\]+/); //special chars

if (a + b + c + d > 2 && e) {// Success}
else {// Failure}
Run Code Online (Sandbox Code Playgroud)