Как проверить пароль регулярного выражения в Python?

Использование регулярного выражения в Python, как я могу проверить, что пароль пользователя:

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

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

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"

Ответ 1

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

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

Ответ 2

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

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

// pseudo-code
Bool PwdCheckLength(String pwd)
{
    Int minLen = getSystemParameter("MinPwdLen");
    return pwd.len() < minlen;
}

Ответ 3

Ну, вот мое решение без регулярного выражения (по-прежнему требуется некоторая работа):

#TODO: the initialization below is incomplete
hardCodedSetOfAllowedCharacters = set(c for c in '[email protected]#$%^&*()_+')
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

Ответ 4

Это регулярное выражение подтвердите, если пароль:

  • заглавные буквы: A-Z -lowercase буквы: a-z
  • цифры: 0-9
  • любой из специальные символы:! @£ $% ^ & amp * *() _+ = {}?: ~ []] +

    re.compile(r'^.*(?=.{8,10})(?=.*[a-zA-Z])(?=.*?[A-Z])(?=.*\d)[[email protected]£$%^&*()_+={}?:~\[\]]+$')
    

Ответ 5

import re
password=raw_input("Please give me a password: ")
if len(re.findall("[[email protected]#$%^&+=]",password))==len(password):
    print("Great password")
else:
    print("Incorrect password")

Если вы хотите запустить его в python 3.0 и выше, замените raw_input на вход.

Ответ 6

Если вы хотите, чтобы программа продолжала работать до тех пор, пока не будет введен правильный пароль, выполните следующие действия.

import re

while True:
    print('Input a strong password.')
    password = input()
    if re.match(r'[[email protected]#$%^&+=]{8,}', password):
        print('Very nice password. Much secure')
        break
    else:
        print('Not a valid password')