#python #regex #getpass
#python #регулярное выражение #getpass
Вопрос:
Я написал код, который фактически соответствует регулярному выражению patter в Python. Я использовал библиотеку getpass, чтобы предложить пользователю ввести пароль.Но если пользователь вводит неправильный пароль [скажите ‘HH’ — это неверный пароль].Как только пользователь нажимает enter после ввода пароля, get pass принимает «HH» и «введите как r» [два разных ввода]. Теперь мне нужен способ узнать, как отделить ‘ r’ от передачи в качестве входных данных.
Я пытался использовать функцию strip для удаления ‘ r’, но безуспешно
import getpass
import re
loopVar=True
while loopVar:
password = getpass.getpass("Enter your password: ")
password.rstrip('r')
pattern=re.match(r'(?=.{5,32}$)(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[^A-Za-z0-9])',password)
if pattern:
print ("The password mateches as per standards")
loopVar=False
else:
print ("The password " password " is not as per rules ")
Enter your password:
The password hh is not as per rules
Enter your password:(this is taking r as input character and I dont need this)
The password is not as per rules
Enter your password:[Prompting user to input]
Комментарии:
1. Возможно, добавьте еще один отрицательный прогноз, чтобы утверждать, что не может быть пробельного символа
(?!.*s)
2. Если вы хотели добавить отрицательный прогноз в шаблон reg ex , я пытался, но не сработало . Спасибо за предложение
Ответ №1:
Вы слишком близко 🙂
измените свой код с:
password.rstrip('r')
Для
password = password.rstrip('r')
Объяснение:
из документов python,
str.rstrip([символы]): возвращает копию строки с удаленными конечными символами.
поскольку строка неизменяема в python, вам нужно снова назначить эту копию вашей переменной
Редактировать: отвечая на проблему получения двойных записей, когда пользователь вводит пароль и нажимает enter, одна запись содержит строку пароля, а вторая — пустой код ввода ‘ r’, вы можете добавить оператор if, чтобы отфильтровать второй пример ввода:
password = getpass.getpass("Enter your password: ")
if password != 'r': # filter out echo input
password.rstrip('r')
pattern=re.match(r'(?=.{5,32}$)(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[^A-Za-z0-9])',password)
if pattern:
print ("The password mateches as per standards")
loopVar=False
else:
print ("The password " password " is not as per rules ")
Комментарии:
1. Спасибо, приятель!!! Но все же я сталкиваюсь с той же проблемой. Он все еще принимает ввод в качестве нового ввода
2. вы имеете в виду, что хотите пренебречь вводом только ввода, т. Е. Если пользователь нажал Enter с пустым паролем?
3. @Akash я отредактировал ответ, посмотрите, решает ли он вашу проблему с получением дополнительного ввода в качестве нового ввода
4. Я все еще вижу, что r принимается в качестве входных данных… Я не уверен, почему эта дополнительная команда [‘ r’ в данном случае ] выполняется автоматически. Введите свой пароль: пароль dd не соответствует правилам Введите свой пароль: Пароль не соответствует правилам Введите свой пароль: [запрашивает agian для ввода допустимого ввода] Это то, что я вижу…