Используя regex в Python, как может, я проверяю, что пароль пользователя:
Отметьте, все символы буквы/числа/особенной являются дополнительными. Я только хочу проверить, что пароль является по крайней мере 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"
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
требует, чтобы вся строка соответствовала всему регулярному выражению, а не только его части.
Вот мое решение без регулярных выражений (все еще нужно доработать):
#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
Я согласен с Хаммишем. Не используйте для этого регулярное выражение. Используйте дискретные функции для каждого теста, а затем вызывайте их по очереди. В следующем году, когда вы захотите потребовать в пароле как минимум 2 верхних и 2 строчных буквы, вы не будете довольны попыткой изменить это регулярное выражение.
Другой причиной для этого является разрешение пользователя на настройку. Предположим, вы продаете свою программу кому-то, кому нужны пароли из 12 символов. Легче изменить одну функцию для обработки системных параметров, чем изменить регулярное выражение.
// pseudo-code
Bool PwdCheckLength(String pwd)
{
Int minLen = getSystemParameter("MinPwdLen");
return pwd.len() < minlen;
}