Regex 使用尾随数字的正则表达式信用卡匹配

Regex 使用尾随数字的正则表达式信用卡匹配,regex,credit-card,Regex,Credit Card,我正在尝试只对信用卡进行正/负匹配。我需要确定是否只有附加的尾随数字 我可以有任意字符串,但只有在有两个以上连续数字且数字后面有空格时才触发匹配 我已经根据我们的需要对它进行了一吨级的改进,但我在几个月内逐渐做到了这一点。你可以忽略很多复杂性,它只是为信用卡做精确的数字匹配。我只是想处理额外的尾随数字。我当前使用的正则表达式如下所示: \b(?<!\d.)(3[47]\d{2}([ -]?)(?!(\d)\3{5}|123456|234567|345678|5454545)\d{6}\2(

我正在尝试只对信用卡进行正/负匹配。我需要确定是否只有附加的尾随数字

我可以有任意字符串,但只有在有两个以上连续数字且数字后面有空格时才触发匹配

我已经根据我们的需要对它进行了一吨级的改进,但我在几个月内逐渐做到了这一点。你可以忽略很多复杂性,它只是为信用卡做精确的数字匹配。我只是想处理额外的尾随数字。我当前使用的正则表达式如下所示:

\b(?<!\d.)(3[47]\d{2}([ -]?)(?!(\d)\3{5}|123456|234567|345678|5454545)\d{6}\2(?!(\d)\4{4})\d{5}|((4\d|5[1-5]|65)\d{2}|6011)([ -]?)(?!(\d)\8{3}|1234|3456|5678)\d{4}\7(?!(\d)\9{3})\d{4}\7\d{4})(\b|\s)
以下内容不匹配:

42704460500750a8
4270
4270 4460 5007 504
42811293test123
然而,这件事却让我抓狂。有一堆具有这种长数字模式的文件不断被捕获。我想更新包含的正则表达式以消除有效匹配,当且仅当它后面至少有3个以上的数字时,如以下示例中所示:

4270 4460 5007 5048 1234 5083 5095 5179 5157 5219 5187 5095  
4270 4460 5007 5048 123123115132124151231
4270 4460 5007 5048123
42704460500750481234
但以下内容应根据到期日符号继续生成匹配项:

4270 4460 5007 5048 12
我尝试了以下消极展望,但我可能误解了我需要做的事情:

 (?![\d][^\d][^\d])
这导致了对匹配项的一些奇怪的更改,我并没有得到唯一匹配的字符串,没有尾随空格,或者只有一个尾随空格,但有任意数量的数字。我在部分中构建了这个函数,我不确定多个lookaside函数如何相互作用,这可能是问题的一部分

如果您有兴趣尝试,这里有一个预构建的测试平台:


谢谢

玩了4个小时后,我意识到我错过了什么

我需要的字符串是:

(?!.\d\d)
最后一个信用卡匹配字符串是我见过的最好的字符串:

\b(?<!\d.)(3[47]\d{2}([ -]?)(?!(\d)\3{5}|123456|234567|345678|424242|545454|11111)\d{6}\2(?!(\d)\4{4})\d{5}|((4\d|5[1-5]|65)\d{2}|6011)([ -]?)(?!(\d)\8{3}|4242|5454|1234|3456|5678|2345|4567|1111)\d{4}\7(?!(\d)\9{3})\d{4}\7\d{4})(\b|\s)(?!.\d\d)
为了排除大多数测试和样本编号,如4242 4242 42424和5454 5454或1234 5678 9012 3456或4111 1111 1111、4123 4567 8901 1111等,它在假阴性方面有一点错误

谢谢你们的灵感,伙计们-

此特定正则表达式的详细测试套件位于以下链接:


我不明白。请说得更具体些。你用的是什么图案。什么是匹配还是不匹配?你期望它匹配什么?如果你需要一个匹配失败,基于它之后的某个东西,你需要使用消极的前瞻。看,我更新了它,希望添加clarity@EricM:请查收。在开始的时候,你介意吗?是否检查它后面是否有数字和非单词字符,可能是您想要的?开头是一个查找,以验证前面是否有数字。不过,谢谢你的反馈。我找到了答案,并把它贴在下面。
\b(?<!\d.)(3[47]\d{2}([ -]?)(?!(\d)\3{5}|123456|234567|345678|424242|545454|11111)\d{6}\2(?!(\d)\4{4})\d{5}|((4\d|5[1-5]|65)\d{2}|6011)([ -]?)(?!(\d)\8{3}|4242|5454|1234|3456|5678|2345|4567|1111)\d{4}\7(?!(\d)\9{3})\d{4}\7\d{4})(\b|\s)(?!.\d\d)