信用卡验证正则表达式

本文关键字:正则表达式 验证 信用卡 | 更新日期: 2023-09-27 17:59:58

我在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();

我尝试的每个卡号都会给我相同的结果,该号码无效。有人能指引我朝正确的方向走吗?非常感谢!

信用卡验证正则表达式

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

^[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}$

看一下"查找和验证信用卡号",它对此主题进行了深入讨论。这里提出的正则表达式是(去掉连字符和空格后):

^(?: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
)$