Как протестировать regex пароль в Python?

Используя regex в Python, как может, я проверяю, что пароль пользователя:

  • По крайней мере 8 символов
  • Должен быть ограничен, хотя конкретно не требует ни одного из:
    • прописные буквы: A-Z
    • строчные буквы: a-z
    • числа: 0-9
    • любой из специальных символов: # % $ ^& + =

Отметьте, все символы буквы/числа/особенной являются дополнительными. Я только хочу проверить, что пароль является по крайней мере 8 символами в длине и ограничивается символом буквы/числа/особенной. Это до пользователя для выбора более сильного / более слабый пароль если они, так выберите. До сих пор то, что я имею:

import re
pattern = "^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$"
password = raw_input("Enter string to test: ")
result = re.findall(pattern, password)
if (result):
    print "Valid password"
else:
    print "Password not valid"
13
задан jCuga 7 June 2010 в 15:10
поделиться

3 ответа

import re
password = raw_input("Enter string to test: ")
if re.match(r'[A-Za-z0-9@#$%^&+=]{8,}', password):
    # match
else:
    # no match

{8,} означает «не менее 8». Функция .match требует, чтобы вся строка соответствовала всему регулярному выражению, а не только его части.

26
ответ дан 1 December 2019 в 19:14
поделиться

Вот мое решение без регулярных выражений (все еще нужно доработать):

#TODO: the initialization below is incomplete
hardCodedSetOfAllowedCharacters = set(c for c in '0123456789a...zA...Z~!@#$%^&*()_+')
def getPassword():
    password = raw_input("Enter string to test: ").strip()
    if (len(password) < 8):
        raise AppropriateError("password is too short")
    if any(passChar not in hardCodedSetOfAllowedCharacters for passChar in password):
        raise AppropriateError("password contains illegal characters")
    return password
3
ответ дан 1 December 2019 в 19:14
поделиться

Я согласен с Хаммишем. Не используйте для этого регулярное выражение. Используйте дискретные функции для каждого теста, а затем вызывайте их по очереди. В следующем году, когда вы захотите потребовать в пароле как минимум 2 верхних и 2 строчных буквы, вы не будете довольны попыткой изменить это регулярное выражение.

Другой причиной для этого является разрешение пользователя на настройку. Предположим, вы продаете свою программу кому-то, кому нужны пароли из 12 символов. Легче изменить одну функцию для обработки системных параметров, чем изменить регулярное выражение.

// pseudo-code
Bool PwdCheckLength(String pwd)
{
    Int minLen = getSystemParameter("MinPwdLen");
    return pwd.len() < minlen;
}
5
ответ дан 1 December 2019 в 19:14
поделиться
Другие вопросы по тегам:

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