Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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 - Fatal编程技术网

在python中使用不带重复字符的正则表达式进行密码验证

在python中使用不带重复字符的正则表达式进行密码验证,python,regex,Python,Regex,参数是一个字符串。检查它是否构成安全密码。 密码是安全的,如果 其中至少有一个小写字母,并且 其中至少有一个大写字母,并且 其中至少有一个数字,并且 其中至少有一个特殊字符(+、-、*、/、.或@),并且 它至少包含8个字符,并且 它最多有20个字符,并且 其中没有三个相等的连续字符(例如“a7XXX@fda”因XXX而无效),并且 没有三个字符组出现多次(例如“XYZ.1a.XYZ”无效,因为XYZ出现两次) 我试过: regex = [r'^.{8,20}$', r'[a-z]+', r

参数是一个字符串。检查它是否构成安全密码。 密码是安全的,如果

  • 其中至少有一个小写字母,并且
  • 其中至少有一个大写字母,并且
  • 其中至少有一个数字,并且
  • 其中至少有一个特殊字符(+、-、*、/、.或@),并且
  • 它至少包含8个字符,并且
  • 它最多有20个字符,并且
  • 其中没有三个相等的连续字符(例如“a7XXX@fda”因XXX而无效),并且
  • 没有三个字符组出现多次(例如“XYZ.1a.XYZ”无效,因为XYZ出现两次)
我试过:

regex = [r'^.{8,20}$', r'[a-z]+', r'[A-Z]+', r'\d+', r'[-+*/.@]', r'(.)(.)(.)(\1\2\3)']

return all(re.search(pas, password) for pas in regex)

您可以使用前瞻断言:

import re

reg=re.compile(r"(?=.*[a-z]+.*)(?=.*[A-Z]+.*)(?=.*\d+.*)(?=.*[-\+\*\./@]+.*)(?!.*(.)\1\1.*)(?!.*(.{3}).*\2.*).{8,20}$")

pwds=[ "aA3@5678", "aA3@567","abcdefghABCDEFGH+-*3","abcdefghABCDEFGH+-*3X","aA3@555678","aA3@@@5678", "a_A3Q_5678*A3Q", "a_A+Q_3.14/-5678*A+Q"]


for pwd in pwds:
    m=reg.fullmatch(pwd)
    print("{}: {}".format(pwd,"good" if m else "bad"))

100个字符的密码不安全?你做了什么来调试它?例如,您是否检查了每个正则表达式,以确定哪些正则表达式失败?另外,运行代码时会发生什么?是否所有密码都标记为安全?不安全的?你有错误吗?我觉得在你的情况下迭代输入会容易得多。请澄清最后一个条件。所有其他条件都是明确的:
返回重新搜索(r'^(?=[^a-z]*[a-z])(?=[^a-z]*[a-z])(?=\D*\D)(?=[^-+*/.@]*[-+*/.@])(?!.*()\1{2})。{8,20}$',s)
。很可能,您需要在
{8,20}
之前添加一个额外的
(?!*(…).*\2)
。看,我想这是家庭作业吧?如果你真的想确保“安全密码”,这会适得其反。如果它是家庭作业,它有助于准确地解释作业是什么。例如,您是否确实需要使用一系列正则表达式匹配项进行测试?如果没有,就像加拉布拉建议的那样,你可能至少不想对其中一些使用正则表达式,但如果需要,这样的建议会浪费你和我们的时间。非常感谢!!