Страницы

Поиск по вопросам

пятница, 14 февраля 2020 г.

Подбор пароля с помощью регулярных выражений

#python #python_3x #регулярные_выражения


После запуска программы (на Python), даже когда ввожу подходящий пароль, пишет Password
not valid

import re

passRegex = re.compile(r'[a-zA-Z0-9]{8,}')          # Символы допустимые в пароле
myPass = input()                                    # Пароль, который будем проверять
if re.match(passRegex, myPass) is not myPass:
    print('Password not valid')
else:
    print('Valid password')


Что делаю не так?
    


Ответы

Ответ 1



Комманда if re.match(passRegex, myPass) is not myPass: не правильна (к тому же использует myPass дважды, что само особе сомнительное). Замените часть if re.match(passRegex, myPass) is not myPass: print('Password not valid') else: print('Valid password') на if re.match(passRegex, myPass): print('Valid password') else: print('Password not valid') Заметите, пожалуйста, взаимной обмен тел ветвей if и else.

Ответ 2



Здесь две ошибки, одна в самом коде, другая - в регулярном выражении (или же снова эту ошибку можно исправить с помощью кода): re.match возвращает объект совпадения (match data object) или, при отсутствии совпадения, None. Поэтому if re.match(passRegex, myPass) is not myPass неверно, так как всегда верно. re.match ищет совпадение только в начале строки. Так как пароль должен состоять из 8 и более букв или цифр, необходимо либо добавить в конце регулярного выраджения знак $ (конец строки, чтобы требовалось совпадение целой строки), либо - в Python 3.x - можно воспользоваться методом re.fullmatch, который требует совпадения целой строки. Для совместимости с Python 2.x, приведу следующий пример исправленного кода с использованием re.match: passRegex = re.compile(r'[a-zA-Z0-9]{8,}$') if passRegex.match(myPass): print('Пароль верный') else: print('Неверный пароль') Обратите внимание, объект passRegex - это уже скомпилированное регулярное выражение, можно использовать метод match данного объекта напрямую.

Ответ 3



re.match(passRegex, myPass) Эта строка кода возвращает объект не строкового типа, поэтому сравнивать его с Вашим паролем некорректно. Поменяйте условие на is not None: и местами сообщения.

Комментариев нет:

Отправить комментарий