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

如何合并正则表达式以匹配含空格、短横线的支付卡号?

解决带空格/短横线的信用卡卡号匹配问题

需求背景

需要在邮件中检测Visa、Mastercard及Amex支付卡号,卡号中允许存在任意数量的空格或短横线分隔符。现有两个正则:

  • 匹配无分隔符标准卡号的正则:
    \b4[0-9]{12}(?:[0-9]{3})?|(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}|3[47][0-9]{13}\b
    
  • 匹配连续空格/短横线的正则:\b[ -]+\b

需要将两者合并为一个可直接匹配带分隔符卡号的正则。

解决方案

核心方法是在原正则的每个字符(固定数字或数字组里的单个数字)后添加非捕获分组(?:[ -]*),这个分组会匹配0个或任意多个空格/短横线,从而兼容各种带分隔符的卡号格式。

最终正则表达式

\b4(?:[ -]*)([0-9](?:[ -]*)){12}(?:([0-9](?:[ -]*)){3})?|(?:5(?:[ -]*)[1-5](?:[ -]*)([0-9](?:[ -]*)){2}|2(?:[ -]*)2(?:[ -]*)2(?:[ -]*)[1-9](?:[ -]*)|2(?:[ -]*)2(?:[ -]*)[3-9](?:[ -]*)[0-9](?:[ -]*)|2(?:[ -]*)[3-6](?:[ -]*)([0-9](?:[ -]*)){2}|2(?:[ -]*)7(?:[ -]*)[01](?:[ -]*)[0-9](?:[ -]*)|2(?:[ -]*)7(?:[ -]*)2(?:[ -]*)0(?:[ -]*))([0-9](?:[ -]*)){12}|3(?:[ -]*)[47](?:[ -]*)([0-9](?:[ -]*)){13}\b

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 13:15:04