Как подтвердить пароль с моим следующим условием? Любая функция? - PullRequest
0 голосов
/ 17 июня 2020
  1. Он должен содержать заглавную букву.
  2. Он должен содержать хотя бы одну цифру.
  3. Он должен содержать знак препинания.
  4. Он не может иметь слово «пароль» в строке.
  5. Он должен быть длиннее 7 символов и короче 31 символа.

Примеры

Ввод: «passWord123 !!! ! "

Вывод: false

Вход: "turkey90AAA ="

Вывод: true

Я пробовал следующий код,

func SimplePassword(_ str: String) -> String {

  let password = self.trimmingCharacters(in: CharacterSet.whitespaces)
    let passwordRegx = "^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&<>*~:`-]).{8,}$"
   let passwordCheck = NSPredicate(format: "SELF MATCHES %@",passwordRegx)
    return passwordCheck.evaluate(with: password)

  return str

}

1 Ответ

2 голосов
/ 17 июня 2020

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

func isValid(password: String) -> Bool {
    return (8...30).contains(password.count) &&
        password.rangeOfCharacter(from: .uppercaseLetters) != nil &&
        password.rangeOfCharacter(from: .decimalDigits) != nil &&
        password.rangeOfCharacter(from: .punctuationCharacters) != nil &&
        !password.lowercased().contains("password")
}

Обратите внимание, что в вашем примере вы говорите, что " turkey90AAA = "должен возвращать истину, но '=' не является знаком препинания, поэтому приведенный выше код его не примет. Вместо этого этот символ является символом, поэтому, если вы хотите включить его, добавьте также проверку на набор символов .symbols, password.rangeOfCharacter(from: .symbols) != nil

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