2013-11-14 31 views
0

连字符表达要允许在密码验证连字符,以下是该情况下─
1.必须包含混合情况下
2.长度必须是8至32
3.至少一个特殊字符。 (只有在键盘上可见)。经常用于在密码

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

+5

'我已' - 请出示。另外这可能是[有趣的阅读](http://security.stackexchange.com/a/33471)。 – HamZa

+1

如果您当前的正则表达式正确匹配除连字符之外的所有内容,只需将其添加到特殊字符集的最后,就在关闭之前] – OGHaza

+0

密码的最大长度不是一个好主意。 –

回答

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(".*[[email protected]#$%^&*()_'\"+={};:<>,.?/-].*"); 
    // length & no other char 
    valid &= password.matches("[[email protected]#$%^&*()_'\"+={};:<>,.?/-]{8,32}"); 
    return valid; 
} 
+0

它适用于我的案件。 – umesh

1

你需要在你的角色类中允许使用连字号-

试试这个正则表达式:

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

不,我不工作。 – umesh