信用卡验证正则表达式
本文关键字:正则表达式 验证 信用卡 | 更新日期: 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
)$