Python正则表达式用于密码验证

3
我有以下要求来验证密码,需要满足以下条件:
  • 至少一个数字
  • 至少一个大写字母
  • 至少一个小写字母
  • 至少一个特殊字符[$@#]
以下程序只进行了部分匹配而不是完整的正则表达式。
#!/usr/sfw/bin/python
import re
password = raw_input("Enter string to test: ")
if re.match(r'[A-Za-z0-9@#$]{6,12}', password):
    print "match"
else:
    print "Not Match"

正在使用:

localhost@user1$ ./pass.py
Enter string to test: abcdabcd
match

它正在评估错误的输出。有人能建议我是否应该使用re.search吗?


“'abcdabcd'”符合您的正则表达式,它在有效字符列表中有6到12个字符。 - jonrsharpe
只有如下的输入才是有效的:abcd123A#,abcd123A$,abcd123A @。它不应该接受任何其他形式的输入,如abcd233AA#。请参考以下输出: localhost@user1$ ./pass.py 请输入要测试的字符串:abcd233AA# 匹配 - user216358
这些也符合正则表达式,但是你编写的表达式并没有强制执行你的要求列表。 - jonrsharpe
你能为我建议一个正则表达式来强制执行要求吗? - user216358
你可能还想查看 https://stackoverflow.com/questions/45878324/how-to-check-if-string-has-lowercase-letter-uppercase-letter-and-number/ 并可能使用/调整其中的一个解决方案... - Jon Clements
1个回答

11
这是至少包含一个数字、一个大写字母、至少一个小写字母和至少一个特殊字符的正则表达式。
import re
password = input("Enter string to test: ")
# Add any special characters as your wish I used only #@$
if re.match(r"^(?=.*[\d])(?=.*[A-Z])(?=.*[a-z])(?=.*[@#$])[\w\d@#$]{6,12}$", password):
    print ("match")
else:
    print ("Not Match")

希望这能帮到你...

本地主机@用户1$ ./pass.py 输入要测试的字符串:abcd123A# 不匹配 它失败了 只允许使用特殊字符 $、@ 和 #。 - user216358
2
@MuthuKumar 将每个前瞻中的 .+ 替换为 .*。在上面的正则表达式中,第一个前瞻期望数字之前有一个字符存在。但是在这个例子 2abcdjgA# 中,在 2 之前没有任何字符。因此它会失败。 - Avinash Raj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接