如何在这个'密码复杂性'正则表达式中允许下划线

Met*_*uru 4 regex

这里是:

/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/
Run Code Online (Sandbox Code Playgroud)

只有当密码包含大写和小写字母,并且还包含1位数或1个特殊字符时,它才会通过,但我希望下划线_也算作特殊字符,而且它目前没有,如何修改此正则表达式以便它会让下划线算作一个特殊字符吗?

编辑:这是上下文...

jQuery.validator.addMethod("complexity", function(value, element) {
    return this.optional(element) || /(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/.test(value);
}, "password is not complex, see requirements above");
Run Code Online (Sandbox Code Playgroud)

Sco*_*ain 21

/(?=^.{8,}$)((?=.*\d)|(?=.*[\W_]+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/
Run Code Online (Sandbox Code Playgroud)

aioobe被[\ W_]紧密替换\ W

所以你知道这会把空间视为一个特殊的角色.

另外,我看不到你在哪里检查数字.编辑:没关系,我发现了它.(男人复杂的正则表达式就像一个沃尔多.)

这是一个简化版本,不允许使用空格(并且易于维护)

(?=^.{8,}$)(?=.*[a-z])(?=.*[A-Z])(?=.*[\W_])(?=^.*[^\s].*$).*$
^          ^          ^          ^            ^
|          |          |          |            L--does not contain a whitespace
|          |          |          L--at least one non word character(a-zA-Z0-9_) or _ or 0-9
|          |          L--at least one upper case letter
|          L--at least one lowercase Letter
L--Number of charaters
Run Code Online (Sandbox Code Playgroud)

这些是你的基石

(?=.*[a-z]) // Whatever is inside the [] meens the string contains at least one charter inside that set.
            // If you wanted a minimum of three lowercase letters you can chain the inner block like so 
               (?=(.*[a-z]){3,})
Run Code Online (Sandbox Code Playgroud)

  • 你的表达似乎都没有正常工作.例如在PHP中'aaa1111aA'作为有效密码传递,尽管它不包含任何特殊字符.我必须修改后者才能正确捕获特殊字符:`/(?= ^.{8,} $)(?=.*[az])(?=.*[AZ])(? =.*[\ d])(?=.*[\ W _])(?= ^*[^\S].*$).*$ /` (2认同)

zig*_*don 7

你想在一个正则表达式中做所有这些的特殊原因吗?在我看来,如果你把它分解下来,那将会更具可读性:

 if (password.length() < 8) return "Password too short!";
 if (!password.matches("\d")) return "Password must contain at least one digit!";
 if (!password.matches("[A-Z]")) return "Password must contain at least one uppercase leter!";
 if (!password.matches("[a-z]")) return "Password must contain at least one lowercase leter!";

 // Password is valid, save it, etc.
Run Code Online (Sandbox Code Playgroud)