python - 正则表达式序列强密码
问题描述
我想测试输入值是否符合标准:
- 至少一个小写字母
- 至少有一个大写字母
- 至少一位数
- 至少有一个非 \w 字符
我编写的正则表达式似乎只遵循这个特定的顺序,例如:abCD99$%
但是如果我打乱了序列,正则表达式就不再起作用了:CD99ab$%
请问有谁知道是什么问题?提前喝彩。
import re
# Asks user for an input
print('Please enter a password for checking its strength:')
pwd = input('> ')
#Test the input to see if it is more than 8 characters
if not len(pwd) < 8:
pwdRegex = re.compile(r'([a-z]+)([A-Z]+)([0-9]+)(\W+)') #order problem
if not pwdRegex.search(pwd) == None:
print('Password OK.')
else:
print('Please make sure password fulfills requirements!')
else:
print('Characters must not be less than 8 characters!')
解决方案
您需要使用前瞻来验证您的要求:
(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*\W)^.+$
(?=.*[a-z])
- 确保我们在某处有一个小写字符(?=.*[A-Z])
- 确保我们在某处有一个大写字符(?=.*[0-9])
- 确保我们在某处有一个数字(?=.*\W)
- 确保我们有一个非\w
某处^.+$
- 满足所有上述要求,因此让我们捕获整条生产线- 如果您只是进行通过/失败测试并且不需要捕获任何内容,则可以省略此部分
推荐阅读
- logging - logging.config.fileConfig : SyntaxError: (unicode 错误)
- python - 将 Iris(.data 文件)拆分为列表列表
- c++ - 使用 2 个容器的 C++ 线程
- python-3.x - 在 for 循环中删除元素
- scheme - Scheme中的'('() 2 3)和'(() 2 3)有什么区别?
- sql-server - SQL Server 命令行工具版本与不同版本的 SQL Server 的兼容性
- redux - Redux 请求状态。减少样板文件
- python-3.x - 尝试为 Jira 问题对象调用 add_attachment 时出现“RuntimeError:迭代期间字典键已更改”,但未使用字典?
- c++ - boost::serialization 中的派生类偏移计算。它有效吗?
- java - Hibernate @ColumnTransformer 注入数据库模式