【问题标题】:Credit Card Verification Regular Expression信用卡验证正则表达式
【发布时间】:2015-09-14 10:52:17
【问题描述】:

我在为 Visual C# 中的信用卡号验证程序创建正则表达式时遇到了一些问题。 卡片的数字需要用破折号(-)分隔,第一个数字必须是 1-9,第二组数字必须是 1-3。例如 2204-1232-9746-5558 或 1111-1111-1111-1111。

这是我目前所拥有的:

    Regex card = new Regex(@"^[1-9][0-9]{2}-[1-3]{3}-[0-9]{3}-[0-9]{3}$");
        string myCard = txtCard.Text;
        Match m  = card.Match(myCard);

        if(m.Success)
        {
            MessageBox.Show("The card number entered is vaild");
        }
        else
        {
            MessageBox.Show("The card number entered is an invaild card number...");
        }

        txtCard.Clear();
        txtCard.Focus();

我尝试的每个卡号都给我相同的结果,该号码无效。 谁能引导我朝着正确的方向前进? 非常感谢!

【问题讨论】:

  • 你在哪里告诉正则表达式你期望 4 位数字,而不仅仅是 1 ?
  • 并非所有信用卡都遵循相同的数字模式。除非你打算强迫你的用户遵循你的模式,否则你真的应该考虑另一种方法,或者至少是不同的正则表达式

标签: c# regex


【解决方案1】:

看看Finding and Verifying Credit Card Numbers,里面有关于这个话题的深入讨论。那里提出的正则表达式是(去除连字符和空格后):

^(?:4[0-9]{12}(?:[0-9]{3})?          # Visa
 |  5[1-5][0-9]{14}                  # MasterCard
 |  3[47][0-9]{13}                   # American Express
 |  3(?:0[0-5]|[68][0-9])[0-9]{11}   # Diners Club
 |  6(?:011|5[0-9]{2})[0-9]{12}      # Discover
 |  (?:2131|1800|35\d{3})\d{11}      # JCB
)$

【讨论】:

    【解决方案2】:

    您的问题出在正则表达式中。应该是

    ^[1-9][0-9]{3}-[1-3]{4}-[0-9]{4}-[0-9]{4}$
    

    {4} 是 [] 中应该存在多少个数字。

    您还应该注意,第二个 [1-3] 对于信用卡来说是不正常的。至少来自我的银行。

    我会将上面的内容更改为此。您可能需要检查速度,以及这是否完全符合您的要求。

    ^[1-9][0-9]{3}(-[0-9]{4}){3}$
    

    【讨论】:

      猜你喜欢
      • 2018-08-15
      • 2010-11-30
      • 2016-07-31
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      • 2023-03-17
      • 1970-01-01
      相关资源
      最近更新 更多