Python正则实现信用卡号校验:如何兼容空格、句点等多类分隔符
信用卡号分隔符兼容正则修改方案
要实现同时支持连字符、空格、句点三种分隔符的校验需求,只需把原有正则中所有匹配可选连字符的-?,替换为匹配三种可选分隔符的字符集即可。
修改后的完整代码
import re credit_cards = ['6011346728478930','5465625879615786','5711424424442444', '5000-2368-7954-3214', '4444444444444444', '5331625879615786', '5770625879615786', '5750625879615786', '575455879615786', '3423.3423.2343.3433', '3323 3223 442 3234'] def World_BINS(credit_cards): # 替换原有的-?为[. -],匹配可选的句点、空格、连字符分隔符,连字符放末尾避免正则范围解析歧义 valid_BINS = r"^5(?:465|331|000|[0-9]{2})([. -]?\d{4}){3}$" # 所有匹配可选连字符的位置统一替换为三种分隔符的匹配规则 do_not_repeat = r"((\d)[. -]?(?!([. -]?\2){3})){16}" filters = valid_BINS, do_not_repeat for num in credit_cards: if all(re.match(f, num) for f in filters): print(f"{num} is Valid") else: print(f"{num} is invalid") World_BINS(credit_cards)
修改说明
- 字符集
[. -]会匹配句点、空格、连字符三种字符中的任意一种,末尾的?表示分隔符为可选,同时兼容无分隔符的纯数字卡号 - 如果需要额外限制同一张卡号只能使用同一种分隔符(避免出现
1234-5678.1234 4321这类混用分隔符的异常格式),可以在valid_BINS正则开头添加预判断逻辑:r"^(?!.*([. -]).*(?!\1)[. -])5(?:465|331|000|[0-9]{2})([. -]?\d{4}){3}$"
内容的提问来源于stack exchange,提问作者TheBMAN
相关产品推荐
相关产品推荐

