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

Python使用Regex校验用户输入返回None时如何正确得到True

问题排查

你的代码存在两处核心问题,导致匹配始终失败、无法拿到预期的校验结果:

  1. 正则表达式存在笔误:最后一段匹配规则多写了一个右花括号,你写的[0-9]}{4}$中,[0-9]后多余的}会被正则引擎解析为需要匹配字面量的}字符,和你要匹配4位数字的预期完全不符,因此正常输入手机号时永远匹配失败,返回None。
  2. 对re.match的返回值逻辑理解有偏差:re.match匹配成功时返回的是Match匹配对象,不是布尔值True,只有匹配失败时才会返回None,要拿到布尔类型的校验结果,需要手动对返回值做布尔转换。
    另外你的代码没有提前导入re模块,直接运行会触发名称错误。
修正后可运行代码
import re

def validation():
    flag = True
    while flag:
        phone = input('Enter your phone number (XXX-XXX-XXXX): ')
        # 修正正则笔误,删除多余的右花括号
        match_result = re.match(r'^[0-9]{3}-[0-9]{3}-[0-9]{4}$', phone)
        print(match_result)
        # 转换为布尔值,匹配成功即为True,失败为False
        is_valid = bool(match_result)
        print(is_valid)
        if is_valid:
            flag = False
            # 此处后续补充校验通过后的业务逻辑

validation()

运行测试时输入符合XXX-XXX-XXXX格式的号码(比如123-456-7890),就会打印匹配对象和True,输入格式错误的内容则会打印None和False。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:06:31