Regex для пароля длиной не менее 8 символов, включая как минимум 3 из них: заглавные буквы, строчные буквы, цифры и специальные символы - PullRequest
0 голосов
/ 10 января 2019

Ниже приведено регулярное выражение, которое я в настоящее время использую для проверки паролей: как минимум один символ в верхнем регистре, как минимум один символ в нижнем регистре, как минимум один номер и длина не менее 8 символов.

func isValidPassword() -> Bool {
    let passwordRegEx = "^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{8,}$"
    return NSPredicate(format:"SELF MATCHES %@", passwordRegEx).evaluate(with: self)
}

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

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

Каким будет регулярное выражение для этого требования?

1 Ответ

0 голосов
/ 10 января 2019

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

  • Регулярное выражение будет трудно понять / поддерживать любому программисту всего за несколько месяцев. И любой программист включает вас в течение нескольких месяцев
  • Вы можете предоставить подробную информацию пользователю, если требования не совпадают. Вы можете отобразить сообщение «В пароле нет заглавных букв» и т. Д.
  • Вы могли бы (более) легко реализовать такие вещи, как "запретить повторяющиеся числа" и т. Д.
  • Хотя производительность не имеет значения, регулярное выражение будет намного медленнее, чем зацикливание.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...