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

Python3 re正则如何忽略横杠匹配连续重复数字(用于信用卡校验)

解决方案

直接调整validNoConsecutive的正则规则即可实现忽略横杠校验连续重复数字,修改后的完整代码如下:

import re

def isValid(number):
    validStart = re.compile(r'^[456]') # 卡号以4、5、6开头
    validLength = re.compile(r'^[0-9]{16}$|^[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}$') # 长度符合16位纯数字或4-4-4-4带横杠格式
    validOnlyDigits = re.compile(r'^[0-9-]*$') # 仅包含数字和横杠
    # 修改后的连续重复校验规则:禁止4个及以上相同数字(中间可穿插横杠)
    validNoConsecutive = re.compile(r'(?!(\d)(-?\1){3})') 
    validators = [validStart, validLength, validOnlyDigits, validNoConsecutive]
    return all([val.search(number) for val in validators])

# 测试示例
arr = ["1234-5678-9101-1213", "1233-3345-6789-1011", "4444567890123456", "5123-4567-8901-2345"]
list(map(print, ['Valid' if isValid(num) else 'Invalid' for num in arr]))

规则说明

新的负向前瞻规则r'(?!(\d)(-?\1){3})'的逻辑为:

  • 首先捕获1位数字到分组1
  • 后续重复匹配3次「0或1个横杠 + 与分组1完全相同的数字」
  • 只要字符串中存在符合该规则的片段,就说明存在4个连续的相同数字(中间可穿插横杠),负向前瞻生效,校验不通过。

该规则兼容纯数字和带横杠两种卡号格式,无需提前替换横杠即可完成校验,完全符合需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:36:02