首页 > 解决方案 > 如何从 getpass 提示符中删除 \r 字符

问题描述

我编写了一个代码,它实际上与 Python 中的模式 RegEx 匹配。我已经使用getpass库提示用户输入密码。但是如果用户输入错误的密码[说'HH'-这是无效密码]。一旦用户在输入密码后点击回车,获取通行证正在“ HH" 和 "enter as \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]

标签: pythonregexgetpass

解决方案


你离得太近了:)

修改您的代码:

password.rstrip('\r')

password = password.rstrip('\r')

说明:来自 python文档

str.rstrip([chars]):返回删除了尾随字符的字符串副本。

因为字符串在 python 中是不可变的,所以您需要再次将此副本分配给您的变量

编辑: 响应用户输入密码并回车时出现重复条目​​的问题,一个条目有密码字符串,第二个是裸输入代码'\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 ")

推荐阅读