密码中连字符的正则表达式

时间:2013-11-14 12:32:19

标签: java regex

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

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

2 个答案:

答案 0 :(得分:1)

您需要在角色类中允许连字符-

试试这个正则表达式:

^(?=.*?\\d)(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[!@#$%^&*()_'\"+={};:<>,.?/-]).{8,32})$

答案 1 :(得分: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;
}