首页 > 解决方案 > 正则表达式 Java 可选字符

问题描述

我有一个这个正则表达式;

("(?=.*[a-z]).*") ("(?=.*[0-9]).*") ("(?=.*[A-Z]).*") ("(?=.*[!@#$%&*()_+=|<>?{}\\[\\]~-]).*")

检查密码的要求:长度 = 8,然后是以下三个 - 小写字母、大写字母、数字、特殊字符。上述 4 中的 3 + 长度为 8 是必需的。

我所拥有的工作,直到密码中有一个空格,然后它会打印错误消息。换句话说,我如何在我的特殊字符列表中包含空格,谢谢!

标签: javaregexstringpasswords

解决方案


你可以试试这个:

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 案例。


推荐阅读