我想在Android上使用一个正则表达式,其中至少包含3种类型的字符:
Number, upper letter, lower letter and special characters,
我找到了这个正则表达式
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,100}
但是这会告诉最小8和最大,10个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符。 但我需要这4种类型的3种类型,而不是所有4种类型。
例如,此密码有效:
Test1987(因为它包含3个类型=上部字符,下部和数字) & est7sss(也有效,它包含特殊字符,数字和较低字符)
密码无效:
test1987(仅包含两种类型的低位和数字)
我该怎么办呢
----------------- EDIT -------------
我使用了这样的功能,似乎有效
public boolean validatePassword(final String password){
Integer numberType = 0;
if(password.length() > 7){
if (password.matches(".*\\d.*")) {
numberType = numberType + 1;
}
if (password.matches(".*[a-z].*")) {
numberType = numberType + 1;
}
if (password.matches(".*[A-Z].*")) {
numberType = numberType + 1;
}
if (!password.matches("[A-Za-z0-9 ]*")) {
numberType = numberType + 1;
}
}
else{
return false;
}
if(numberType>2)
return true;
return false;
}
答案 0 :(得分:1)
public boolean validatePassword(final String password){
Integer numberType = 0;
if(password.length() > 7){
if (password.matches(".*\\d.*")) {
numberType = numberType + 1;
}
if (password.matches(".*[a-z].*")) {
numberType = numberType + 1;
}
if (password.matches(".*[A-Z].*")) {
numberType = numberType + 1;
}
if (!password.matches("[A-Za-z0-9 ]*")) {
numberType = numberType + 1;
}
}
else{
return false;
}
if(numberType>2)
return true;
return false;
}