西尔斯信用卡以 50 开头——正则表达式失败

Posted

技术标签:

【中文标题】西尔斯信用卡以 50 开头——正则表达式失败【英文标题】:sears credit card starts with 50 -- fails regex 【发布时间】:2012-11-01 07:00:07 【问题描述】:

大多数信用卡正则表达式将万事达卡列为以 5 开头,然后将 1-5 作为第二个数字,尽管这个来自 sears,前四个数字是 5049。我真的不想在不知道是否使用任何其他非约定的情况下更改正则表达式。有谁知道更改它是否非常安全,或者是否还需要进行其他更改?

提前致谢!

【问题讨论】:

【参考方案1】:

你的 RegEx 有问题 :-) [编辑:如果你想支持 Sears 卡,这是你问题的前提]

***上有一个准确的发行人编号列表:

http://en.wikipedia.org/wiki/List_of_Issuer_Identification_Numbers

其中包括 Sears 的 5049。

我建议为每个列出的发行人编号创建一个或多个单元测试,并使用这些单元测试验证您的 RegEx。

更新

有很多被广泛接受的以“50”开头的信用卡,所以如果你的 RegEx 断言第二个数字在 1-5 范围内,它仍然是错误的。

示例(来自 Wiki 链接):

500235 National Bank of Canada
500766 Bank of Montreal

如果您销售的商品允许出售给公益金接受者(例如福利接受者),则还包括 EBT 卡,例如:

507683 Missouri EBT Card

【讨论】:

以上是关于西尔斯信用卡以 50 开头——正则表达式失败的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 - 信用卡验证

PCI 合规性正则表达式检测带空格的模式

求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式

如何编写正则表达式模式以匹配字符串结尾或字符串开头的货币符号

使用正则表达式验证信用卡?

求一个正则表达式: 以英文字母开头,只能包含英文字母、数字、下划线