这里是:
/(?=^.{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)
你想在一个正则表达式中做所有这些的特殊原因吗?在我看来,如果你把它分解下来,那将会更具可读性:
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)