LaJiojio 2022-05-04 21:22 采纳率: 66.7%
浏览 23
已结题

python中re匹配时似乎校验了大小写的顺序导致报错,请问是什么原因导致的,该如何优化?

按实践题自己写的代码,存在bug:写一个函数,它使用正则表达式,确保传入的口令字符串是强口令。强口令的 定义是:长度不少于 8 个字符,同时包含大写和小写字符,至少有一位数字。你可 能需要用多个正则表达式来测试该字符串,以保证它的强度。

不明白此处循环后输入Aa11111111返回False而aA11111111返回True的原因,还请指教。

import re
def check():
    password=input('请输入一个包含大小写字母且不少于8个字符的口令')
    print("将对口令:",password,"执行校验")

    if re.compile(r'(.*){8,}[a-z]+[A-Z]+[0-9]+').search(password) is None :
        print('您输入的口令错误:',password,'请重新输入')
        return False

    else:
        print('您输入的口令成功:',password,'nice')
        return True

while check() == False :
    check()
    while check() ==True :
        print('您的口令录入成功')
        break
else:
    print('您的口令录入成功')

执行结果如下
请输入一个包含大小写字母且不少于8个字符的口令
将对口令:  执行校验
您输入的口令错误: 请重新输入
请输入一个包含大小写字母且不少于8个字符的口令Aaaa
将对口令: Aaaa 执行校验
您输入的口令错误: Aaaa 请重新输入
请输入一个包含大小写字母且不少于8个字符的口令Aa111111
将对口令: Aa111111 执行校验
您输入的口令错误: Aa111111 请重新输入
请输入一个包含大小写字母且不少于8个字符的口令Aa11111111
将对口令: Aa11111111 执行校验
您输入的口令错误: Aa11111111 请重新输入
请输入一个包含大小写字母且不少于8个字符的口令aA11111111
将对口令: aA11111111 执行校验
您输入的口令成功: aA11111111 nice
您的口令录入成功

  • 写回答

3条回答 默认 最新

  • 笨鸟快飞呀 2022-05-04 22:32
    关注

    因为你 (.*){8,}[a-z]+[A-Z]+[0-9]+ 这个表达式,可以匹配到 aA111111,但是匹配不到 Aa111111
    原因是,你的[a-z]+[A-Z]+ 限制了小写在前面,大写在后面。

    如果需要修改的话,要改成没有顺序限制: (.*){8,}[a-zA-Z0-9]+

        if re.compile(r'(.*){8,}[a-zA-Z0-9]+').search(password) is None:
            print('您输入的口令错误:', password, '请重新输入')
            return False
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月13日
  • 已采纳回答 5月5日
  • 创建了问题 5月4日

悬赏问题

  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思