Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式序列强密码_Python_Regex - Fatal编程技术网

Python 正则表达式序列强密码

Python 正则表达式序列强密码,python,regex,Python,Regex,我想测试输入值是否符合标准: 至少一个小写字母 至少有一个大写字母 至少一位数字 至少有一个非\w字符 我编程的正则表达式似乎只遵循以下特定顺序: abCD99$% 但是如果我洗牌了序列,正则表达式就不起作用了: CD99ab$% 有人知道问题出在哪里吗?提前欢呼 import re # Asks user for an input print('Please enter a password for checking its strength:') pwd = input('>

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

  • 至少一个小写字母
  • 至少有一个大写字母
  • 至少一位数字
  • 至少有一个非\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!')
重新导入
#请求用户输入
打印('请输入密码以检查其强度:')
pwd=输入(“>”)
#测试输入是否超过8个字符
如果长度(pwd)<8:
pwdRegex=re.compile(r'([a-z]+)([a-z]+)([0-9]+)(\W+)#顺序问题
如果不是pwdRegex.search(pwd)=无:
打印('密码确定')
其他:
打印('请确保密码满足要求!')
其他:
打印('字符不得少于8个!')

包中包含执行此操作的代码。如果您对如何实现而不是实际实现感兴趣,可以阅读源代码。

您需要使用lookaheads来验证您的需求:

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

在您的情况下,我认为不使用正则表达式进行验证可能是一个很好的解决方案:

def isGoodPassword(密码):
#包含上下字符、数字字符和特殊字符
return(不是password.islower()
而不是密码。isupper()
和any(c.isdigit()表示密码中的c)
和任何(不是密码中c的c.isalnum())
isGoodPassword('hello')#错误
isGoodPassword(“你好!”)#错误
isGoodPassword('Hello!1')#正确

正确使用正向注视将解决该问题。我发现有很多这样的例子。对于这些标准,使用单独的正则表达式要容易得多。请参考以下答案:@Thomas,如果您不熟悉正则表达式:-)