Python Re.search для программы проверки символов пароля (проверка пароля)

Я делаю программу для проверки надежности пароля. Пароль должен состоять из прописных букв, строчных букв, разрешенных символов и цифр. Я смог заставить остальную часть программы работать (используя re.search(r'[az], структура пароля). Я сократил проблемную область до этих нескольких строк, но не могу заставить эту часть работать. Должен ли я использовать что-то другое для re.search?

    import re
    symbols = ["!","(",")","£","^"]
    password = input("password")
    if re.search(r'[symbols]',password):
      print("ok")
    else:
      print("no")

1 ответ

Решение

Ты почти там. Просто укажите все ваши символы в диапазоне регулярных выражений:

password_valid = bool(re.search(r'[!()£^]', password))

внутри [..] большинство метасимволов регулярных выражений теряют свое особое значение, просто следите за ^ в первой позиции и для классов персонажей, как \w,

Если вы позаботитесь о том, чтобы предотвратить такие случаи, вы можете сохранить символы в списке и использовать их следующим образом:

symbols = ["!", "(", ")", "£", "^"]
password_valid = bool(re.search(r'[{}]'.format(''.join(symbols)), password))

Полное решение может быть примерно таким

import re
def is_password_valid(password):
    return bool(re.search('(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[+\-*\/])(?=.*[!()£^])', password))

или проще понять

import re
def is_password_valid(pas):
    is_ok1 = bool(re.search("[a-z]",pas))
    is_ok2 = bool(re.search("[A-Z]",pas))
    is_ok3 = bool(re.search("[0-9]",pas))
    is_ok4 = bool(re.search("[+\-*\/!()£^]",pas))        
    return is_ok1 and is_ok2 and is_ok3 and is_ok4 
Другие вопросы по тегам