别建议我链接,我看了几百万次。
我查看了许多建议 - 例如Regex credit card number tests。但是,我并不主要关注验证潜在的信用额度。
我希望通过识别12到19个数字的序列(加上它们之间的几个常见分隔符)来在文档中找到(可能的)信用卡号。 @TimBiegeleisen指出,例如Finding or Verifying Credit Card Numbers正在讨论这个问题。但建议的解决方案会导致一些漏报。 (参见下面的“问题......”部分。)
示例输入:
['232625427', '请停止检查已发送6/10 reg邮件和reissu fedex的220 2000000。请 收取信用卡4610 0000 0000 0000 exp 05/99 ...谢谢,Sxxx'] ['232653042', '市场:Exxxx或Bxxxx-请用月信用卡设置丈夫和妻子 付款。信用卡上的姓名为Hxxxx-Jxxxx Lxxxx(婚前姓名,保单上的姓名不同)主卡号5424 0000 0000 0000 Exp 11-30-00。非常感谢。' ]
我RegEx101.com attempt的更多样本输入。
我的正则表达式是
[1-9](\d[ ]?[ ]*?[-]?[-]*?[:]*?[:]?){11,18}\b
4554-4545-4545-4545Visa
。999999999999994190000000000000
我得到9994190000000000000
而不是9999999999999941900
我正在RegEx101.com进行测试。
答案 0 :(得分:1)
要解决标题中的问题" Reg Ex获得的数字比预期更多" (阅读"数字" as"字符"但是),尝试:
[1-9]([- :]*\d){11,18}\b
这样,您不再匹配示例输入中的尾随空白。请参阅RegEx101.com中的实际操作。
更接近你在"问题所指出的内容......"应该是:
[1-9]([- :]*\d){11,18}
从末尾删除单词边界后,紧跟在数字序列后面的字符串不再导致错误否定。而且比赛也不再偏向于潜在比赛的结束。但是,这会处理001 111111111111
与您的方法不同:
RegEx101.com
这可以通过
来解决[1-9][0-9]([- :]*\d){10,17}
以允许来自" 5452 0000 0000 0000000":RegEx101.com的更多零来为代价。
仅针对您的示例输入检查所有建议。不同的输入可能需要进一步调整。
如果需要调整/进一步详细说明,请发表评论。