Regex Java необязательные символы - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть это регулярное выражение;

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

, которое проверяет пароль с требованиями: длина = 8, затем три из следующих: нижний регистр, верхний регистр, цифра,особый персонаж.Требуется 3 из вышеперечисленных 4 + длина 8.

То, что у меня работает, пока в пароле не будет пробела, то напечатает неверное сообщение.Другими словами, как мне включить пробел в мой список специальных символов, спасибо!

1 Ответ

0 голосов
/ 01 марта 2019

Вы можете попробовать это:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...