首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MasterCard的正则表达式

MasterCard的正则表达式
EN

Stack Overflow用户
提问于 2016-02-28 22:38:40
回答 1查看 4.5K关注 0票数 4

我为信用卡类型MasterCard找到了以下正则表达式

代码语言:javascript
复制
public static readonly string CreditMasterCard = @"^(5[1 - 5][0 - 9]{14})$";

然后我编写了以下代码:

代码语言:javascript
复制
Regex regexMasterCard = new Regex(CommonLibrary.RegexCreditCardStrings.CreditMasterCard);

if (regexMasterCard.IsMatch(number)) return CommonLibrary.CreditCardType.mastercard;

但是当我设定数字=‘5308171154251187’时,这是错误的。在regex中什么是不正确的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-28 22:41:41

只需移除字符类中的空格:

代码语言:javascript
复制
^5[1-5][0-9]{14}$

这些空格在字符类中总是有意义的(即使您指定了RegexOptions.IgnorePatternWhitespace标志),在您的示例中,它们创建的范围从一个空间到另一个空间,而不是从1到5和0到9位数。此外,不需要在外括号中,不需要捕获整个模式(始终可以使用$0反向引用或match.Value来引用整个匹配)。

regex演示

如@saj注释所示,您现在可以使用

代码语言:javascript
复制
^(?: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}$

regex演示

详细信息

  • ^ -字符串的开始
  • (?: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} - 51 to 5和任意2位数(51005599)
    • 222[1-9] - 2221 to 2229
    • 22[3-9][0-9] - 2230 to 2299
    • 2[3-6][0-9]{2} - 2,然后36和任意2位数(23002699)
    • 27[01][0-9] - 2700直到2719
    • 2720 - 2720

  • [0-9]{12} -任何12位数
  • $ -字符串的末端。
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35689191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档