Python使用Regex校验用户输入返回None时如何正确得到True
问题排查
你的代码存在两处核心问题,导致匹配始终失败、无法拿到预期的校验结果:
- 正则表达式存在笔误:最后一段匹配规则多写了一个右花括号,你写的
[0-9]}{4}$中,[0-9]后多余的}会被正则引擎解析为需要匹配字面量的}字符,和你要匹配4位数字的预期完全不符,因此正常输入手机号时永远匹配失败,返回None。 - 对
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
相关产品推荐
相关产品推荐

