You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

学习Python正则:为何if语句中用AND验证密码逻辑失效?

密码验证正则问题的修复方案

你的问题核心是正则元字符*的误用,而非AND逻辑的问题。下面详细解释原因并给出修正代码:

问题根源:* vs +的区别

正则中:

  • * 表示零次或多次匹配——即使目标字符串里没有符合的字符,它也会匹配空字符串,导致re.search始终返回匹配结果,条件永远为真。
  • + 表示一次或多次匹配——要求目标字符串里至少存在一个符合的字符,这才符合你“至少一个大写字母和一个数字”的需求。

你之前的代码用[A-Z]*和[0-9]*,哪怕密码里没有大写字母或数字,re.search也会匹配成功,所以条件判断失效,错误地输出“Password created”。

修正后的代码

把正则里的*替换成+即可:

import re
password = input()

# 验证至少包含一个大写字母和一个数字
if re.search(r"[A-Z]+", password) and re.search(r"[0-9]+", password):
    print("Password created")
else:
    print("Wrong format")

你的初始代码用了re.match,它只会从字符串开头开始匹配。比如如果密码是"abcA123",re.match(r"[A-Z]+", password)会返回None,因为开头没有大写字母。而re.search会扫描整个字符串找匹配项,更适合“包含某字符”的验证场景。

测试验证

  • 输入“Greatness”:无数字,re.search(r"[0-9]+")返回None,输出Wrong format(符合预期)
  • 输入“12335”:无大写字母,re.search(r"[A-Z]+")返回None,输出Wrong format(符合预期)
  • 输入“Gm16gs”:同时包含大写字母和数字,输出Password created(符合预期)

内容的提问来源于stack exchange,提问作者Dharco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 19:09:28