我有这个正则表达式;
("(?=.*[a-z]).*")
("(?=.*[0-9]).*")
("(?=.*[A-Z]).*")
("(?=.*[!@#$%&*()_+=|<>?{}\\[\\]~-]).*")
根据要求检查密码: 长度= 8,则以下三个- 小写字母,大写字母,数字,特殊字符。 需要以上4个中的3个+ 8个长度。
在密码中没有空格之前,我所拥有的一直有效,然后它会输出错误的消息。 换句话说,我如何在特殊字符列表中包含空格,谢谢!
答案 0 :(得分:0)
您可以尝试一下:
String password = "pA55w$rd";
int counter = 0;
if(password.length() >= 8)
{
Pattern pat = Pattern.compile(".*[a-z].*"); // Lowercase
Matcher m = pat.matcher(password);
if(m.find()) counter++;
pat = Pattern.compile(".*[0-9].*"); // Digit
m = pat.matcher(password);
if(m.find()) counter++;
pat = Pattern.compile(".*[A-Z].*"); // Uppercase
m = pat.matcher(password);
if(m.find()) counter++;
pat = Pattern.compile(".*\\W.*"); // Special Character
m = pat.matcher(password);
if(m.find()) counter++;
if(counter == 3 || counter == 4)
{
System.out.println("VALID PASSWORD!");
}
else
{
System.out.println("INVALID PASSWORD!");
}
}
else
{
System.out.println("INVALID PASSWORD!");
}
有两种情况:要么与所需长度匹配,要么不匹配。
如果确实匹配长度,它将检查4种情况中的每一种,并在每次匹配时增加一个计数器。由于您希望它匹配3或4种情况,因此我在此处放置了if-else情况。