RegEx查找带有嵌入空格的信用卡号

时间:2013-05-15 15:38:44

标签: regex credit-card

我们目前有一个内容合规性,我们会监控任何包含没有空格的信用卡号码(例如 5100080000000000

我们需要的是一个reg ex来获取每4位数字输入的信用卡号码(例如: 5100 0800 0000 0000

我们一直在寻找替代的注册表,但尚未找到适用于上述两种情况的注册表。

我们使用的当前注册表在

之下
  

^((4- \ d {3})|(5 [1-5] \ d {2})|(6011)|(34 \ d {1})|(37 \ d {1})) ???? - \ d {4} - \ d {4} - \ d {4} | 3 [4,7] [\ d \ S - ] {15} $

5 个答案:

答案 0 :(得分:2)

只需在已有可选/s?

的位置添加可选-?即可

所以你的正则表达式变成了

^((4\d{3})|(5[1-5]\d{2})|(6011)|(34\d{1})|(37\d{1}))-?\s?\d{4}-?\s?\d{4}-?\s?\d{4}|3[4,7][\d\s-]{15}$

答案 1 :(得分:1)

您似乎已经接受了每四个字符的短划线。因此,您只需将-?替换为[- ]?无处不在。

如果您需要短划线或空格保持一致 - 也就是说,根本不允许分组,或者每四个字符使用一个破折号,或者每四个字符一个空格,您可以使用后退参考来强制重复相同第一场比赛:

^(?:4\d{3}|5[1-5]\d{2}|6011|3[47]\d{2})([- ]?)\d{4}\1\d{4}\1\d{4}$

您会注意到我删除了最终的3[4,7]...,这看起来像是一个错误的添加,显然是在尝试部分解决此问题时所做的。此外,我将括号更改为非分组(?:...),或者只是在没有分组似乎必要或有用的情况下删除它们,主要是因为这样可以更容易地看到后引用\1所指的内容。最后,34 ..和37 ..模式有\d{1}显然是\d{2}的意图(或者如果这些特定系列在第一个短划线之前只有三位数,则重复{1}只是多余的,但3[4,7]...部分会更加错误!)

答案 2 :(得分:0)

((\d+) *(\d+) *(\d+) *(\d+))

这将是一般的想法(它甚至可以工作!),如果你愿意,你可以打磨它。有一个很棒的页面可以测试你的正则表达式 - http://rubular.com/

答案 3 :(得分:0)

试试这个:

(\d{4} *\d{4} *\d{4} *\d{4})

答案 4 :(得分:0)

如果有人使用AMEX卡并且在任何一个'块'中输入3或5个数字而不是4个,那么所有这些想法都不会爆炸吗