【问题标题】:What pattern should be used to validate 2 BIN MasterCard numbers [closed]应该使用什么模式来验证 2 BIN 万事达卡号码 [关闭]
【发布时间】:2016-05-20 17:42:57
【问题描述】:

“2”系列 BIN 万事达卡号码将于 2016 年 10 月开始。应该使用什么正则表达式模式来验证它们。今天,我们对以 5 开头的万事达卡使用以下模式:

var re = /^5[1-5]\d{2}-?\d{4}-?\d{4}-?\d{4}$/;

【问题讨论】:

标签: regex validation mastercard


【解决方案1】:

@Rawing 的回答错误地假设万事达卡号码的 BIN 范围将更改为新范围,而 BIN 范围将被新范围扩展是正确的。 p>

因此,对于(盲目)复制正则表达式的未来访问者,您应该使用此版本以允许所有“有效”万事达卡号码(不包括 luhn-check):

/^5[1-5]\d{2}-?\d{4}-?\d{4}-?\d{4}$|^2(?:2(?:2[1-9]|[3-9]\d)|[3-6]\d\d|7(?:[01]\d|20))-?\d{4}-?\d{4}-?\d{4}$/

或者这个版本不允许数字之间有破折号:

/^5[1-5]\d{14}$|^2(?:2(?:2[1-9]|[3-9]\d)|[3-6]\d\d|7(?:[01]\d|20))\d{12}$/

这基本上是@Rawings 答案和问题的组合。

我知道这并没有严格回答问题,但希望能防止支付表单中出现一些复制粘贴错误。

Extended Demo

【讨论】:

  • 当我在原始答案中没有看到“5”时,这是我的第一个想法。谢谢!
  • @migg : working (Y) 您能否提供上述范围(即 2221-2720)的示例万事达卡号码,我需要它进行测试吗?
  • 扩展演示中的数字与正则表达式匹配,但未通过信用卡号所需的校验和验证。链接到具有有效信用卡号的演示:regex101.com/r/cGQNpd/3
  • 如果有人想处理在实际生产中经常发生的随机插入的空格或破折号,请使用:(([5][\s-]*)([1-7][\s-]*)(\d[\s-]*){14})|2[\s-]*(?:2[\s-]*(?:2[\s-]*[1-9]|[3-9][\s-]*\d)|[3-6][\s-]*\d[\s-]*\d|7[\s-]*(?:[01][\s-]*\d|2[\s-]*0[\s-]*))(\d[\s-]*){12}
  • Sarah Elan,你指的是 Luhn 算法?
猜你喜欢
  • 2020-08-01
  • 2019-09-04
  • 2019-08-21
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多