Как проверить пароль регулярного выражения в 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')