我们目前有一个内容合规性,我们会监控任何包含没有空格的信用卡号码(例如 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} $
答案 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个,那么所有这些想法都不会爆炸吗