对于 VISA - 您所要做的就是简单地选择[0-9]
小组赛一场或两次。
^4[0-9]{12}(?:[0-9]{3}){0,2}$
本质上,这与您已经拥有的正则表达式相同,除了可选的[0-9]{3}
小组现在有 3 种可能的结果 -
- 根本不匹配 - 13 位 VISA
- 匹配一次 - 16 位 VISA
- 它被匹配两次 - 19 位 VISA
查看演示here https://regex101.com/r/OYxK2o/1
对于发现卡 - 更简单,您只需添加一个上限[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 https://regex101.com/r/w4Y7KK/1/
Note:这是假设发现卡的长度可以在 16 到 19 之间,而不是 16 或 19。有些消息来源说它可以有介于两者之间的任何长度,而有些消息来源说它只能有 16 或 19。
我不是信用卡专家,但为了完整起见,我将包含一个正则表达式来匹配发现卡的 16 或 19 -
^6(?:011|5[0-9]{2})(?:[0-9]{3}){4,5}$
这一场与决赛相匹配[0-9]
以 4 人为一组,结果如下:
- 匹配了 4 次 - 总共 16 位数字
- 匹配了 5 次 - 总共 19 位数字
查看演示here https://regex101.com/r/w4Y7KK/3
编辑:对于万事达卡,你可以尝试这个-
^(?: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}$
和discover卡的方法一模一样,只要匹配最后的即可[0-9]
以 3 人为一组,并匹配 4 或 5 次。 (也称为 4 次总共 16 位数字和 5 次总共 19 位数字)
查看演示here https://regex101.com/r/4rCypX/1/