支持 19 位 Visa 和 Discover 卡验证的正则表达式模式 [关闭]
Posted
技术标签:
【中文标题】支持 19 位 Visa 和 Discover 卡验证的正则表达式模式 [关闭]【英文标题】:Regex pattern to support the 19 digit Visa and Discover card validation [closed] 【发布时间】:2020-10-14 07:40:43 【问题描述】:目前我正在使用以下正则表达式,但它们不支持 Visa 和 Discover 的 19 位数字卡。请帮忙。
visaCardPattern: /^4[0-9]12(?:[0-9]3)?$/
discoverCardPattern: /^6(?:011|5[0-9]2)[0-9]12$/
【问题讨论】:
19位代码的规则是什么? @VLAZ 规则是一样的,我要问的是上面提到的卡表达式支持16位,我们如何将其更改为最多支持19位,以防签证和发现。跨度> 【参考方案1】:对于 VISA - 您只需将可选的 [0-9]
组匹配一次或两次即可。
^4[0-9]12(?:[0-9]3)0,2$
基本上这与您已经拥有的正则表达式相同,除了可选的 [0-9]3
组现在有 3 种可能的结果-
查看演示here
对于发现卡 - 更简单,您只需为 [0-9]12
添加一个上限。
由于发现卡的长度可以在 16 到 19(含)之间,您只需将正则表达式更改为 -
^6(?:011|5[0-9]2)[0-9]12,15$
这与您自己的正则表达式相同,只是最终的 0-9
组现在具有以下结果-
查看演示here
注意:这是假设发现卡的长度可以在 16 到 19 之间,而不是 16 或 19。一些消息来源说它可以有任何长度,而有些人说它只能有 16 或 19。
我不是信用卡专家,但为了完整起见,我将包含一个正则表达式来匹配发现卡的 16 或 19-
^6(?:011|5[0-9]2)(?:[0-9]3)4,5$
这个匹配最终的[0-9]
4 人一组,结果如下-
查看演示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
【讨论】:
这是一个很好的答案,解释得很好。你能帮我处理万事达卡吗?在万事达卡的情况下,我尝试了同样的方法来支持 16 位和 19 位数字。 masterCardPattern: /^(?: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]12$/ 评论中提到的万事达卡模式支持16位数字以上是关于支持 19 位 Visa 和 Discover 卡验证的正则表达式模式 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章