首页 > 解决方案 > 正则表达式序列强密码

问题描述

我想测试输入值是否符合标准:

我编写的正则表达式似乎只遵循这个特定的顺序,例如: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!')

标签: pythonregex

解决方案


您需要使用前瞻来验证您的要求:

(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*\W)^.+$
  • (?=.*[a-z])- 确保我们在某处有一个小写字符
  • (?=.*[A-Z])- 确保我们在某处有一个大写字符
  • (?=.*[0-9])- 确保我们在某处有一个数字
  • (?=.*\W)- 确保我们有一个非\w某处
  • ^.+$- 满足所有上述要求,因此让我们捕获整条生产线
    • 如果您只是进行通过/失败测试并且不需要捕获任何内容,则可以省略此部分

https://regex101.com/r/HdfVXp/1/


推荐阅读