万事达卡的正则表达式
本文关键字:正则表达式 万事达卡 | 更新日期: 2023-09-27 18:36:35
我找到了以下信用卡类型万事达卡的正则表达式
public static readonly string CreditMasterCard = @"^(5[1 - 5][0 - 9]{14})$";
然后我写了下面的代码:
Regex regexMasterCard = new Regex(CommonLibrary.RegexCreditCardStrings.CreditMasterCard);
if (regexMasterCard.IsMatch(number)) return CommonLibrary.CreditCardType.mastercard;
但是当我设置 number='5308171154251187' 时,这是错误的。正则表达式中什么是不正确的?
你只需要删除字符类中的空格:
^5[1-5][0-9]{14}$
这些空格在字符类中始终有意义(即使您指定了 RegexOptions.IgnorePatternWhitespace
标志),并且在您的情况下,它们创建了从空格到空格的范围,而不是从 1 到 5 和 0 到 9 位数字。此外,不需要在外括号中,您不需要捕获整个模式(您始终可以使用反向引用或match.Value
引用$0
整个匹配项)。
请参阅正则表达式演示。
根据@saj评论,您现在可以使用
^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}$
查看正则表达式演示
详情:
-
^
- 字符串的开头 -
(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)
- 任何替代方案:-
5[1-5][0-9]{2}
-5
,5
和任意 2 位数字的1
(5100
到5599
) -
222[1-9]
-2221
至2229
-
22[3-9][0-9]
-2230
到2299
-
2[3-6][0-9]{2}
-2
,然后3
到6
和任意 2 位数字(2300
直到2699
) -
27[01][0-9]
-2700
直到2719
-
2720
-2720
-
-
[0-9]{12}
- 任意 12 位数字 -
$
- 字符串的结尾。