Yelo
@Yelo
сам ни ни)

Чего не хватает в коде по проверке соответствия пароля?, как правильно сделать?

Доброе время суток, задача сделать проверку пароля на соответствие требованиям безопасности но ни как не выходит добиться 100%-го соответствия требованиям и не много не могу разобраться правильно ли я вообще делаю? Пожалуйста подскажите мои ошибки и как правильно реализовать эту задачку?
Требования к паролю:
1. Длинна от 8 до 20;
2. один символ;
3. одна буква верхнего регистра;
4. одна буква нижнего регистра;
5. одна цифра;
Далее сам код:
import re


def check_password(s):  # функция принимает пароль в текстовом формате
    if len(s) < 8:
        return 'not valid'
    elif len(s) > 20:
        return 'not valid'
    elif s == '':
        return 'not valid'
    else:
        result = [
            re.search(r"[a-zA-Z]", s),
            re.search(r"[0-9]", s),
            re.search(r"\AThe", s),
            re.search(r"Spain\Z", s),
            re.search(r"[+!@#$%^&*?]", s)
        ]
    
        if all(result):
            return 'valid'
        else:
            return 'not valid'


# далее примеры ввода данных
pint(check_password(""))  # "not valid"
pint(check_password("password"))  #  "not valid"
pint(check_password("asd@12"))  # "not valid"
pint(check_password("asd456q@Asw"))  #  "valid"
pint(check_password("asd456q@Aswasd456q@Aswasd456q@Aswasd456q@Asw")  # "not valid"
pint(check_password("Asd#@1aWdsa123"))  # "valid"
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
@o5a
Это не понятно откуда взялось, оно тут явно лишнее
re.search(r"\AThe", s),
re.search(r"Spain\Z", s),


Эту проверку
re.search(r"[a-zA-Z]", s),
нужно разделить на отдельные для верхнего и нижнего регистра [a-z], [A-Z]
сейчас она ловит, если есть хотя бы одна верхнего или нижнего, а не И

Проверка на пустую строку тоже не нужна, она итак учитывается в условии len(s)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы