Формат пароля NSPredicate - PullRequest
       8

Формат пароля NSPredicate

0 голосов
/ 27 апреля 2018

Я пытаюсь найти точное решение для проверки поля пароля с помощью NSPredicate. Вот мой код:

-(int)checkPasswordStrength:(NSString *)password
{
    NSPredicate *validPassword = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",@"\\b^(?=.*[0-9]+?)(?=.*[A-Z]+?)(?=.*[a-z]*?)(?=.*[!@#$%?]+?)[0-9A-z!@#$%?]{8,20}$\\b"];
    NSString *escapedPassword = [NSRegularExpression escapedPatternForString:password];
    if(![validPassword evaluateWithObject:escapedPassword]) {
        [Helper showAlertWithTitle:@"" Message:@"Password should contain 8 to 20 alphanumeric characters, one capitalized letter, and with at least one of the symbols (e.g. !@#$%?)"];
        return 0;
    }

    return 1;
}

Я пробовал шаблоны:

\\b^(?=.*[0-9]+?)(?=(.*\\d){1})(?=.*[a-zA-Z])(?=.*[!@#$%?]).*[0-9a-zA-Z!@#$%?]{8,20}\\b

\\b^(?=.*[0-9]+?)(?=.*[A-Z]+?)(?=.*[a-z]*?)(?=.*[!@#$%?]+?)[0-9A-z!@#$%?]{8,20}$\\b

\\b^(?=.*[0-9]+?)(?=.*[A-Z]+?)(?=.*[a-z]*?)(?=.*[!@#$%?]+?)[0-9A-z!@#$%?]{8,20}$\\b

... Оба без экранирования и экранирования строк, но это не будет работать только для этого типа шаблонов паролей (где специальные символы находятся после первая и последняя строка пароля):

OverAndUnder21!
AreYouHere2?
PleaseDial9#
!4Ngrier!
!D4ngerZone

Все остальные пароли работают:

P@MyF8fulDog
classM8s4L!fe

И так далее ...

Я попытался проверить свои шаблоны RegEx на regex101.com, и, похоже, он полностью соответствует.

Каков правильный шаблон проверки в NSPredicate, чтобы разрешить специальным символам в качестве первого и последнего символов ?

1 Ответ

0 голосов
/ 27 апреля 2018

Вам необходимо убрать границы слов и добавить знак вопроса к шаблону:

@"^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%?])[0-9A-Za-z!@#$%?]{8,20}$"

См. Демоверсию регулярных выражений .

Граница слова в начале и конце шаблона требует, чтобы первым и последним символом было слово char (буква, цифра или _).

Кроме того, обратите внимание, +? не является обязательным внутри заглядываний, поскольку вам просто требуется как минимум 1 экземпляр шаблонов.

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