Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.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_Re - Fatal编程技术网

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

在python中检查密码强度的正则表达式?,python,regex,re,Python,Regex,Re,我正在尝试做一个正则表达式,可以检查密码的强度。如果出现以下情况,则认为密码是强密码: 它的最小长度为8个字符 它必须至少包含2个大写字母和2个小写字母 它必须至少包含2位数字 它必须至少包含两个来自$、%、&、!、的特殊字符# 这就是我所做的: # Strong Password Checker import re password_regex = re.compile(r'[(A-Z){2}(a-z){2}(0-9){2}($%&!#){2}]{8,}') if passwor

我正在尝试做一个正则表达式,可以检查密码的强度。如果出现以下情况,则认为密码是强密码:

  • 它的最小长度为8个字符
  • 它必须至少包含2个大写字母和2个小写字母
  • 它必须至少包含2位数字
  • 它必须至少包含两个来自
    $、%、&、!、的特殊字符#
这就是我所做的:

# 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,}
$

正则表达式详细信息:

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

[(A-Z){2}(A-Z){2}(0-9){2}($%&!#){2}]
是一个字符类,在那里接受任何单个符号。因此,它接受,
,然后
A-Z
,和
,和
{
,和
2
,和
}
,等等。不是每个字符串问题都是正则表达式问题,这是一个很好的例子,其中一些简单的代码(例如
len(密码)
,明智地使用
isupper()
islower()
string.ascii_大写字母
等)将更简单、更清晰。@Sheri,部分原因是它已经被询问过了。请记住在问新问题之前搜索。@Chris是的,你说得对,使用
isupper()
islower()
可能会更好,但正如我在我的中提到的,我正在学习正则表达式,所以我必须使用正则表达式,顺便说一句,感谢您的回复和激励注意,如果您分几个步骤进行,阅读起来可能会更容易,所有人都表示:一个正则表达式用于检查数字,一个正则表达式用于检查最大字符,等等,如果任何正则表达式失败,那么失败一旦我们将这个长正则表达式分解为以下不同的组件:那么就更容易理解了。