Как проверить пароль регулярного выражения в Python? - PullRequest
13 голосов
/ 07 июня 2010

Используя регулярное выражение в 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"

Ответы [ 6 ]

26 голосов
/ 07 июня 2010
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 требует, чтобы вся строка соответствовала всему регулярному выражению, а не только части.

5 голосов
/ 07 июня 2010

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

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

// pseudo-code
Bool PwdCheckLength(String pwd)
{
    Int minLen = getSystemParameter("MinPwdLen");
    return pwd.len() < minlen;
}
3 голосов
/ 07 июня 2010

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

#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
1 голос
/ 04 августа 2017
import re
password=raw_input("Please give me a password: ")
if len(re.findall("[A-Za-z0-9@#$%^&+=]",password))==len(password):
    print("Great password")
else:
    print("Incorrect password")

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

0 голосов
/ 08 июня 2017

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

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

    re.compile (г '^. (? =. {8,10}) (? =. [A-Za-Z]) (? =. ? [AZ] ) (? =. \ d) [A-Za-Z0-9 @ £ $% ^ & * () _ + = {} ?: ~ []] + $ ')

0 голосов
/ 22 марта 2017

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

import re

while True:
    print('Input a strong password.')
    password = input()
    if re.match(r'[A-Za-z0-9@#$%^&+=]{8,}', password):
        print('Very nice password. Much secure')
        break
    else:
        print('Not a valid password')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...