Проверка пароля Python с использованием специальных символов - избегая регулярных выражений
Относительно новый для Python, но я пока не видел ничего подобного в SO.
Я нахожусь в процессе создания валидатора пароля в Python, я уже создал несколько правил, таких как длина, алфавитно-цифровые, заглавные буквы и т. Д. Часть, на которой я зациклен, состоит в том, что мне также нужен специальный набор специальных символов для проверки, Я не уверен, есть ли у меня просто проблема с синтаксисом, или если я не создаю часть проверки кода, но независимо от того, что я ввожу, кажется, что всегда отмечаются специальные символы как отсутствующие в пароле, даже если они есть.
Я попытался вызвать список специальных символов следующим образом:
spec= "!@#$%&_="
Часть, выполняющая работу, проходит серию проверок достоверности для каждого элемента (упомянутого выше) для проверки специальных символов, которую я пытаюсь выполнить:
elif not any(s in spec for char in s):
print ("Password must contain a special character of !@#$%&_=")
Программа запускается, но нажимает на специальный оператор печати даже с действительным паролем, который должен пройти. Я полагаю, что я зацикливаюсь на выражениях elif + any in, и синтаксис отключен.
ПРИМЕЧАНИЕ. Я хочу избегать использования регулярных выражений и использовать указанный список специальных символов.
Заранее спасибо!
2 ответа
Исправить вы заменить any(s in spec for char in s)
от any(char in spec for char in s)
,
Чтобы проверить, содержит ли пароль хотя бы специальный символ, выполните:
special_character = "!@#$%&_="
def is_valid(pwd):
global special_character
return any(char in spec for char in pwd)
def is_valid_other_method(pwd):
global special_character
return len(set(special_character).intersection(set(pwd))) > 0
print(is_valid('qwerty!'))
# True
print(is_valid('qwerty'))
# False
Выход:
True
False
Вы были на правильном пути. Однако вам нужно реализовать последнюю функцию. Вот весь код, который вам нужен.
word = "!@#$%&&^&*"
def true(pwd))
global character
return any(char in spec for char in pwd)
def otherthingsthatstrue(pwd):
global character
return len(set(character).intersection(set(pwd))) > 0
print(true('word!')
print(otherthingsthatstrue('word'))