Проверка пароля 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'))
Другие вопросы по тегам