python - 如何从 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]
解决方案
你离得太近了:)
修改您的代码:
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 ")
推荐阅读
- linux - 我想将字符串添加到特定位置
- java - 如何在 Maven 项目中使用 RPM 依赖项?
- eclipse - LLVM 和日食
- oracle11g - 使用会话 ID 查找连接到 oracle 数据库的应用程序
- c# - 精灵不使用立方体贴图渲染
- python - 使用 datetimeindex 重新采样/插值时间序列
- tensorflow - 带有验证数据的 keras model.fit - 使用哪个 batch_size 来评估验证数据?
- node.js - (没有接受的答案)如何使用 ffmpeg 或 opencv 将 2 个重叠视频合并为一个视频?
- azure-active-directory - 我可以关闭 Azure AD RedirectURI 的区分大小写吗
- javascript - 如果我的 var 未设置为 redux 状态,请导航