【发布时间】:2016-11-16 14:30:35
【问题描述】:
我正在尝试编写一个程序,它使用正则表达式来确保它传递的密码字符串是强的。强密码被定义为至少有八个字符长、包含大写和小写字符并且至少有一个数字的密码。到目前为止,我有以下代码。我花了几个小时修改正则表达式,但是我不能让它通过。每次我进行更改时,似乎强密码都被标记为弱密码,或者弱密码为强密码。知道如何改进吗?
import re
pass2Regex = re.compile(r'''
\d*
[a-zA-Z]*
\d*
[a-zA-Z]*
''',re.VERBOSE)
text = raw_input("enter your password\n")
if len(text) >= 8:
search = pass2Regex.findall(text)
if text in search:
print "%s is a strong password" % (text)
else:
print "%s is a weak password" % (text)
else:
print "%s is a weak password" % (text)
例如,现在如果密码是“231242441”,即使没有字母,它也会被标记为强密码。此外,当我尝试使用 + 而不是 * 时,它只会接受以数字等开头的密码。
感谢您的帮助
【问题讨论】:
-
@WiktorStribiżew 的建议比我的更有用
-
该答案中的相关正则表达式:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$最后一部分的另一种写法是[^\W_]{8,} -
说实话,你的表达式甚至会验证一个空字符串:)