【发布时间】:2023-03-03 02:14:01
【问题描述】:
我需要一个正则表达式来使用此规则验证 JCB 卡,(Reference for JCB format)
前四位数字必须是 3088、3096、3112、3158、3337 或第一个 八位数字必须在 35280000 到 35899999 的范围内。有效 长度:16位。
发现许多帖子使用正则表达式^(?:2131|1800|35\d{3})\d{11}$ 指代post1、post2 和post3。
我正在使用 Authorize.Net 构建信用卡支付模块。但 Authorize.Net 测试 JCB 信用卡验证对于上述正则表达式失败 (^(?:2131...)。
但也有 JCB 卡,如 3088000000000017 (Authorize.Net test card)、3096022966045455、3088810779293696。
帮助我使用正则表达式。我找不到任何带有 2131 或 1800 的 JCB 卡,是我遗漏了什么吗?
【问题讨论】:
-
我强烈建议不要使用正则表达式进行此类验证。您应该将输入解析为数字并进行处理。匹配数字范围的正则表达式非常不透明且不直观;简而言之,这是一场维护噩梦。
-
@Vikhram:我强烈反对。当对数字字符串(或任何字符)的格式有严格的规则并且这些规则不会经常更改时,正则表达式对于识别有效字符串非常有帮助。当然,在信用卡号和其他带有错误检测的数字串的情况下,还应该验证校验位以确保该号码实际上是一个有效的号码,但如果只检查其他格式有效的号码,则可以节省时间.