【Class 30】Python 强口令检测程序

写一个函数,它使用正则表达式,确保传入的口令字符串是强口令。
强口令的定义是:长度不少于 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

可以参考 我的博文: 正则表达式元字符

猜你喜欢

转载自blog.csdn.net/Ciellee/article/details/88078272