【问题标题】:Reg-Ex for JCB Credit Card ValidationJCB 信用卡验证的 Reg-Ex
【发布时间】: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}$ 指代post1post2post3

我正在使用 Authorize.Net 构建信用卡支付模块。但 Authorize.Net 测试 JCB 信用卡验证对于上述正则表达式失败 (^(?:2131...)。

但也有 JCB 卡,如 3088000000000017 (Authorize.Net test card)、3096022966045455、3088810779293696

帮助我使用正则表达式。我找不到任何带有 2131 或 1800 的 JCB 卡,是我遗漏了什么吗?

【问题讨论】:

  • 我强烈建议不要使用正则表达式进行此类验证。您应该将输入解析为数字并进行处理。匹配数字范围的正则表达式非常不透明且不直观;简而言之,这是一场维护噩梦。
  • @Vikhram:我强烈反对。当对数字字符串(或任何字符)的格式有严格的规则并且这些规则不会经常更改时,正则表达式对于识别有效字符串非常有帮助。当然,在信用卡号和其他带有错误检测的数字串的情况下,还应该验证校验位以确保该号码实际上是一个有效的号码,但如果只检查其他格式有效的号码,则可以节省时间.

标签: c# regex


【解决方案1】:

鉴于我会使用这个正则表达式的规则:

^(3(?:088|096|112|158|337|5(?:2[89]|[3-8][0-9]))\d{12})$

细分:

  • ^(3...)$: 锚定开始和结束并捕获以数字3开头的内容

  • (?:...):不要显式捕获内容(在外括号内捕获)

  • 088|...|337|...:匹配任意三位数值

  • 5(?:...): 先匹配5 然后

  • 2[89]|[3-8][0-9]:匹配 2 后接 8 或 9,或匹配 3 到 8 中的任何数字后接任何数字(从 0 到 9)

  • \d{12}:后跟正好 12 位任意数字(\d 与 [0-9] 相同)

编辑:关于您关于以 2131 和 1800 开头的数字的问题,它在您的第三个参考页中读到这些 JCB 卡号的长度为 15 位,而以 35 开头的数字长度为 16 位。如果您的规范仅涉及 16 位长数字,那么您可能不需要匹配那些较短的数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-03
    • 2014-08-14
    • 2011-01-24
    • 2012-08-14
    • 2017-04-02
    • 2016-11-15
    • 2020-11-11
    • 1970-01-01
    相关资源
    最近更新 更多