如何在Python中测试正则表达式密码?

jCu*_*uga 13 python regex passwords

在Python中使用正则表达式,如何验证用户的密码是:

  • 至少8个字符
  • 必须限制,但不具体要求:
    • 大写字母:AZ
    • 小写字母:az
    • 数字:0-9
    • 任何特殊字符:@#$%^&+ =

注意,所有字母/数字/特殊字符都是可选的.我只想验证密码长度至少为8个字符,并且仅限于字母/数字/特殊字符.如果用户选择,则由用户选择更强/更弱的密码.到目前为止我所拥有的是:

import re
pattern = "^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$"
password = raw_input("Enter string to test: ")
result = re.findall(pattern, password)
if (result):
    print "Valid password"
else:
    print "Password not valid"
Run Code Online (Sandbox Code Playgroud)

Amb*_*ber 26

import re
password = raw_input("Enter string to test: ")
if re.match(r'[A-Za-z0-9@#$%^&+=]{8,}', password):
    # match
else:
    # no match
Run Code Online (Sandbox Code Playgroud)

{8,}意思是"至少8".该.match函数要求整个字符串与整个正则表达式匹配,而不仅仅是一部分.

  • 好吧,我最近加入一家公司,并修复了几个月的错误。我经历了很多“ WTF?”的时刻,这使我向别人提出问题并学习一些东西。通常的解释是:我们是在4/6/​​8/10年前写的,这就是当时的做法。我感觉自从我通过修复错误通过学习混乱系统的测试以来,其他人也应该这样做。如果初级编码员过得很愉快,那么他对于这个小组来说太聪明了,或者没有学习的余地。如果您始终使用卫生代码,那么您的“免疫系统”将受到重创和/或开始攻击友好代码。 (2认同)

jmu*_*llo 5

我同意哈米什.不要使用正则表达式.为每个测试使用离散函数,然后按顺序调用它们.明年,当您想要在密码中要求至少2个大写字母和2个小写字母时,您将不满意尝试修改该正则表达式.

另一个原因是允许用户配置.假设您将程序卖给想要12个字符密码的人.修改单个函数来处理系统参数比修改正则表达式更容易.

// pseudo-code
Bool PwdCheckLength(String pwd)
{
    Int minLen = getSystemParameter("MinPwdLen");
    return pwd.len() < minlen;
}
Run Code Online (Sandbox Code Playgroud)