如何修复用于13-19位纯数字校验的Python正则不生效问题
问题原因
你代码中的正则校验逻辑存在漏洞:re.match() 方法仅会从字符串的起始位置匹配规则,只要开头部分符合[0-9]+的要求就会返回匹配成功,不会校验字符串的所有字符。比如输入1234567890abc这类前半段是数字、后半段带字母的内容,re.match()会判定为匹配通过,不会返回Invalid。
修复方案
两种修改方式任选其一即可:
- 给正则表达式添加首尾锚定符,强制匹配整个完整字符串:把正则规则修改为
^[0-9]+$,其中^代表字符串起始位置,$代表字符串结束位置,只有全字符串都是数字才会匹配成功。 - 直接使用
re.fullmatch()方法替代match(),该方法本身要求整个字符串完全符合正则规则,无需额外添加锚定符。
修正后的完整代码
选择第一种锚定符方案的代码示例:
""" Credit card number validation and provider check """ import re def card_range(cardNumber): """ Checks the credit card number length """ if len(cardNumber) < 13: return "Invalid" if len(cardNumber) > 19: return "Invalid" pattern = re.compile("^[0-9]+$") if not pattern.match(cardNumber): return "Invalid" return cardNumber
选择第二种fullmatch方案的对应代码行修改为:
pattern = re.compile("[0-9]+") if not pattern.fullmatch(cardNumber):
内容的提问来源于stack exchange,提问作者vitoruggo
相关产品推荐
相关产品推荐

