支持 19 位 Visa 和 Discover 卡验证的正则表达式模式

Regex pattern to support the 19 digit Visa and Discover card validation

目前我正在使用以下正则表达式,但它们不支持 19 位数字卡的 visa 和 discover。请帮忙。

 visaCardPattern: /^4[0-9]{12}(?:[0-9]{3})?$/

discoverCardPattern: /^6(?:011|5[0-9]{2})[0-9]{12}$/

对于 VISA - 您所要做的就是简单地使可选的 [0-9] 组匹配一次或两次。

^4[0-9]{12}(?:[0-9]{3}){0,2}$

基本上这与您已有的正则表达式相同,除了可选的 [0-9]{3} 组现在有 3 种可能的结果-

  • 完全不匹配 - 13 位 VISA
  • 匹配一次 - 16 位 VISA
  • 匹配两次 - 19 位 VISA

查看演示 here

对于发现卡 - 它更简单,您只需添加一个上限到 [0-9]{12}

由于发现卡片的长度可以在 16 到 19 之间(含),您只需将正则表达式更改为-

^6(?:011|5[0-9]{2})[0-9]{12,15}$

除了最后的 0-9 组现在有以下结果外,这与您自己的正则表达式相同 -

  • 它匹配了 12 次 - 总长度为 16
  • 它匹配了 13 次 - 总长度为 17
  • 它匹配了 14 次 - 总长度为 18
  • 匹配 15 次 - 总长度为 19

查看演示 here

注意:这是假设发现卡的长度可以在 16 到 19 之间,而不是 16 或 19。一些消息来源说它可以是介于两者之间的任何长度, 而有人说它只能有 16 或 19.

我不是信用卡专家,但为了完成,我将包含一个正则表达式来匹配发现卡的 16 或 19-

^6(?:011|5[0-9]{2})(?:[0-9]{3}){4,5}$

这个以 4 人为一组与最后 [0-9] 匹配,结果如下 -

  • 它匹配了 4 次 - 总共 16 个数字
  • 它匹配了 5 次 - 总共 19 个数字

查看演示 here

编辑:对于万事达卡,你可以试试这个-

^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)(?:[0-9]{3}){4,5}$

与发现卡的方法完全相同,只需将最后的[0-9]以3个为一组进行匹配,并使其匹配4或5次。 (也就是 4 次总共 16 位和 5 次总共 19 位)

查看演示 here