Регулярное выражение для пароля (не менее 2 цифр и один специальный символ и минимальная длина 8) - программирование
Подтвердить что ты не робот

Регулярное выражение для пароля (не менее 2 цифр и один специальный символ и минимальная длина 8)

Я искал регулярное выражение, которое принимает как минимум две цифры, а один специальный символ и минимальную длину пароля - 8. До сих пор я делал следующее: [[email protected]#$%0-9]*[[email protected]#$%0-9]+[[email protected]#$%0-9]*

4b9b3361

Ответ 1

Что-то вроде этого должно сделать трюк.

^(?=(.*\d){2})(?=.*[a-zA-Z])(?=.*[[email protected]#$%])[[email protected]#$%]{8,}

(?=(.*\d){2}) - uses lookahead (?=) and says the password must contain at least 2 digits

(?=.*[a-zA-Z]) - uses lookahead and says the password must contain an alpha

(?=.*[[email protected]#$%]) - uses lookahead and says the password must contain 1 or more special characters which are defined

[[email protected]#$%] - dictates the allowed characters

{8,} - says the password must be at least 8 characters long

Может потребоваться небольшая настройка, например. указав точно, какие специальные символы вам нужны, но он должен сделать трюк.

Ответ 2

Нет никакой причины, чтобы реализовать все правила в одном регулярном выражении. Подумайте об этом так:

Pattern[] pwdrules = new Pattern[] {
    Pattern.compile("........"),   // at least 8 chars
    Pattern.compile("\d.*\d"),     // 2 digits
    Pattern.compile("[-!"§$%&/()=?+*~#'_:.,;]") // 1 special char
  }

String password = ......;
boolean passed = true;

for (Pattern p : pwdrules) {
    Matcher m = p.matcher(password);
    if (m.find()) continue;
    System.err.println("Rule " + p + " violated.");
    passed = false;
}

if (passed) { .. ok case.. }
else { .. not ok case ... }

Это имеет дополнительное преимущество, что правила passwort могут быть добавлены, удалены или изменены без усилий. Они могут даже находиться в каком-то файле ressource.

Кроме того, это более читаемо.

Ответ 3

Попробуйте это регулярное выражение. Он использует lookahead для проверки, что есть не менее двух цифр и один из специальных символов, перечисленных вами.

^(?=.*?[0-9].*?[0-9])(?=.*[[email protected]#$%])[[email protected]#$%0-9]{8,}$ 

ОБЪЯСНЕНИЕ

^ #Match start of line.

(?=.*?[0-9].*?[0-9]) #Look ahead and see if you can find at least two digits. Expression will fail if not.

(?=.*[[email protected]#$%]) #Look ahead and see if you can find at least one of the character in bracket []. Expression will fail if not.

[[email protected]#$%0-9]{8,} #Match at least 8 of the characters inside bracket [] to be successful.

$ # Match end of line. 

Ответ 4

Попробуйте следующее:

^(?=.*\d{2,})(?=.*[$-/:-?{-~!"^_`\[\]]{1,})(?=.*\w).{8,}$

Вот как это работает в ближайшее время:

  • (?=.*\d{2,}) эта часть говорит, за исключением как минимум 2 цифр
  • (?=.*[$-/:-?{-~!"^_ []] {1,}) `это специальные символы, не менее 1
  • (?=.*\w), а остальные - любые буквы (равные [A-Za-z0-9_])
  • .{8,}$ здесь написано не менее 8 символов, включая все предыдущие правила. Ниже приведена карта для текущего regexp (сделанная с помощью Regexper) Regexp map UPD

Regexp должен выглядеть так: ^(?=(.*\d){2,})(?=.*[$-\/:-?{-~!"^_'\[\]]{1,})(?=.*\w).{8,}$ Ознакомьтесь с комментариями для более подробной информации.

Ответ 6

Регулярные выражения определяют структуру строки, которую вы пытаетесь сопоставить. Если вы не определяете пространственную структуру вашего регулярного выражения (например, как минимум две цифры, за которыми следует специальный char, за которым следует...), вы не можете использовать regex для проверки вашей строки.