写一个函数,它使用正则表达式,确保传入的口令字符串是强口令。
强口令的定义是:长度不少于 8 个字符,同时包含大写和小写字符,至少有一位数字。
你可能需要用多个正则表达式来测试该字符串,以保证它的强度。
强密码匹配正则表达式如下:
re.compile(r'''
(?=^.{8,}$) # 从头到尾至少匹配八位及以上任意字符(换行除外) (?=....) 之后的字符串要匹配才能成功匹配
((?=.*\d+)) # 至少有一位整数字符 .*\d 任意位整数字符 +至少一位
(?![.\n]) # 没有换行符 .\n 匹配\n在内的任意字符 (?!...) 之后的字符串要没有匹配才能成功匹配
(?=.*[A-Z]) # 大写任意个
(?=.*[a-z]).*$ # 小写任意个
''', re.VERBOSE) # re.VERBOSE 把正则表达式写成多行,并且自动忽略空格
或者
编写正则表达式思路如下(忽略空格啊,添加空格式为何更好看代码):
^.*{8,}$ # 匹配除换行符外的任意8位以上字符
^ (?=.*\d) .*{8,}$ ### 在至少有一位数字的前提下, 匹配除换行符外的任意8位以上字符
^ (?=.*\d) (?!\n) .*{8,}$ ### 在至少有一位数字的前提下, 且没有换行号\n, 匹配除换行符外的任意8位以上字符
^ (?=.*\d) (?!\n) (?=.*[a-z]) .*{8,}$ ### 在至少有一位数字的前提下, 且没有换行号\n, 至少有一个小写字符, 匹配除换行符外的任意8位以上字符
^ (?=.*\d) (?!\n) (?=.*[a-z]) (?=.*[A-Z]) .*{8,}$ ### 在至少有一位数字的前提下, 且没有换行号\n, 至少有一个小写字符和一位大写字符, 匹配除换行符外的任意8位以上字符
程序如下:
import re
def password_check(passwd):
if len(passwd) < 8:
return "Warnning : Length must be longer than 8 !"
reg = re.compile(r'''
(?=^.{8,}$) # 从头到尾至少匹配八位及以上任意字符(换行除外) (?=....) 之后的字符串要匹配才能成功匹配
((?=.*\d+)) # 至少有一位整数字符 .*\d 任意位整数字符 +至少一位
(?![.\n]) # 没有换行符 .\n 匹配\n在内的任意字符 (?!...) 之后的字符串要没有匹配才能成功匹配
(?=.*[A-Z]) # 大写任意个
(?=.*[a-z]).*$ # 小写任意个
''', re.VERBOSE) # re.VERBOSE 把正则表达式写成多行,并且自动忽略空格
return reg.match(passwd)
passwd1 = "abcdAef186"
print(password_check(passwd1))
passwd1 = "abcdAef\n186"
print(password_check(passwd1))
passwd1 = "abcdedf186"
print(password_check(passwd1))
运行结果位:
<re.Match object; span=(0, 10), match='abcdAef186'>
None
None
可以参考 我的博文: 正则表达式元字符