Как удалить символ \ r из приглашения getpass - PullRequest
0 голосов
/ 05 апреля 2019

Я написал код, который фактически соответствует шаблону RegEx в Python. Я использовал библиотеку getpass, чтобы предложить пользователю ввести пароль. Но если пользователь вводит неправильный пароль [скажем, «HH», который является неверным паролем]. Как только пользователь нажимает клавишу ввода после ввода пароля, get get принимает » HH "и" введите как \ r "[два разных ввода]. Теперь мне нужен способ узнать, как отделить '\ r' от передачи в качестве ввода.

Я пытался использовать функцию полосы для удаления '\ 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 Ответ

1 голос
/ 05 апреля 2019

Вы слишком близко:)

изменить ваш код с:

password.rstrip('\r')

до

password = password.rstrip('\r')

Пояснение: из питона документы ,

str.rstrip ([chars]): вернуть копию строки с завершающим символы удалены.

потому что строка является неизменной в python, поэтому вам нужно снова присвоить эту копию вашей переменной

Edit: Отвечая на вопрос о получении двойных записей, когда пользователь вводит пароль и нажимает клавишу ввода, одна запись имеет строку пароля, а вторая пуста, введите код '\ 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 ")
...