正则表达式检查 python 中的密码强度?

Regex to check password strength in python?

我正在尝试制作一个可以检查密码强度的正则表达式。在以下情况下,密码被认为是强密码:

这是我所做的:

# Strong Password Checker
import re

password_regex = re.compile(r'[(A-Z){2}(a-z){2}(0-9){2}($%&!#){2}]{8,}')
if password_regex.match('testpassword'):
    print("Your password is strong")
else:
    print("Your password is weak")

此代码提供的密码不强,但不会将其检测为弱密码,而是将其识别为强密码。

最初我正在学习正则表达式,所以我希望一切都简单明了,如果有人帮助我将不胜感激。

您可以在正则表达式中使用多个先行条件:

^(?=(?:[^A-Z]*[A-Z]){2})(?=(?:[^a-z]*[a-z]){2})(?=(?:\D*\d){2})(?=(?:[^$%&!#]*[$%&!#]){2}).{8,}$

或者使用 x 模式使其更易于阅读:

^
(?=(?:[^A-Z]*[A-Z]){2})
(?=(?:[^a-z]*[a-z]){2})
(?=(?:\D*\d){2})
(?=(?:[^$%&!#]*[$%&!#]){2})
.{8,}
$

RegEx Demo

正则表达式详细信息:

  • ^: 开始
  • (?=(?:[^A-Z]*[A-Z]){2}): 确保至少有 2 个大写字母的先行条件
  • (?=(?:[^a-z]*[a-z]){2}): 确保至少有 2 个小写字母的先行条件
  • (?=(?:\D*\d){2}):先行条件以确保至少有 2 位数字
  • (?=(?:[^$%&!#]*[$%&!#]){2}):先行条件以确保至少有 2 个给定的特殊字符
  • .{8,}:确保我们有8个或更多的长度
  • $:结束