我在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();
我尝试的每张卡号都给我相同的结果,数字无效。 任何人都可以引导我朝着正确的方向前进吗? 非常感谢!
答案 0 :(得分: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}$
答案 1 :(得分: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
)$