0

要在密码验证中允许使用连字符,以下是案例-
1. 必须包含大小写混合
2. 长度必须为 8 到 32
3. 至少一个特殊字符。(仅在键盘上可见)。

我已经做到了,
((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()_'\"+={};:<>,.?/]).{8,32})
但它不允许hyphen,所以放在哪里,hyphen所以它在特殊字符集中包含连字符。

4

2 回答 2

1

您需要-在字符类中允许使用连字符。

试试这个正则表达式:

^(?=.*?\\d)(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[!@#$%^&*()_'\"+={};:<>,.?/-]).{8,32})$
于 2013-11-14T12:34:39.140 回答
1

您可能可以构建一个一次性完成所有检查的正则表达式,但我建议改用以下方法:

private static boolean isPasswordValid(String password) {
    boolean valid = true;
    // at least one lowercased char
    valid &= password.matches(".*[a-z].*");
    // at least one uppercased char
    valid &= password.matches(".*[A-Z].*");
    // at least one digit
    valid &= password.matches(".*[0-9].*");
    // at least one special char
    valid &= password.matches(".*[!@#$%^&*()_'\"+={};:<>,.?/-].*");
    // length & no other char
    valid &= password.matches("[a-zA-Z0-9!@#$%^&*()_'\"+={};:<>,.?/-]{8,32}");
    return valid;
}
于 2013-11-14T13:02:15.893 回答