首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于Regex,如果字符串在一个短语中,可以使用IsMatch吗?

对于Regex,如果字符串在一个短语中,可以使用IsMatch吗?
EN

Stack Overflow用户
提问于 2020-06-29 08:32:24
回答 1查看 60关注 0票数 1

我正在屏蔽我的C#页面中的所有信用卡格式。我使用IsMatch来验证。下面是一个例子:

代码语言:javascript
复制
var creditCardNumber = "This is master card number 5500000000000004";
var mastercard = new Regex(@"^(?:5[1-5][0-9]\d{1}|222[1-9]|2[3-6][0-9]\d{1}|27[01][0-9]|2720)([\ \-]?)\d{4}\1\d{4}\1\d{4}$");

if (mastercard.IsMatch(creditCardNumber))            
{
    String lastFour = creditCardNumber.Substring(creditCardNumber.Length - 4);
    result = "**** **** **** " + lastFour;
} 

它只对单个条目(例如5500000000000004 )进行验证。如果我想要问信用卡号码,即使它是在一个短语或段落?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-29 08:44:27

您需要自定义的数字边界(?<!\d)(?!\d),而不是^$锚。

然后,您不需要那么多字符串操作,只需在将最后四个数字捕获到单独的捕获组中时,就可以找到匹配项,然后使用Regex.Replace掩蔽除最后四个数字之外的所有数字:

代码语言:javascript
复制
var pattern = @"(?<!\d)(?:5[1-5][0-9]\d|222[1-9]|2[3-6][0-9]\d|27[01][0-9]|2720)([ -]?)\d{4}\1\d{4}\1(\d{4})(?!\d)";
var MyText = Regex.Replace(MyText, pattern, "**** **** **** $2");

regex演示

注:{1}是多余的,并从上面的模式中删除。

在这里,(?<!\d)匹配一个不加数字的位置,(\d{4})是一个ID 2的捕获组(因为已经有另一个捕获组([ -]?)),替换模式是星号/空格的字符串,以$2结束,后者是group 2值的占位符。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62634151

复制
相关文章

相似问题

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