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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:09:00