簡體   English   中英

對於 Regex,如果字符串在短語中,是否可以使用 IsMatch?

[英]For Regex, can IsMatch be used if the string is within a phrase?

我在我的 C# 頁面中屏蔽了所有信用卡格式。 我正在使用 IsMatch 進行驗證。 這是一個例子:

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。如果我想詢問信用卡號,即使它在一個短語或段落中怎么辦?

謝謝

您需要自定義數字邊界(?<!\d)(?!\d) ,而不是^$錨點

然后,您不需要太多的字符串操作,您可以在將最后四位數字捕獲到單獨的捕獲組中時簡單地找到匹配項,然后使用Regex.Replace來屏蔽除最后四位之外的所有數字:

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");

查看正則表達式演示

注意{1}是多余的,已從上述模式中刪除。

在這里, (?<!\d)匹配一個沒有緊跟在數字前面的位置, (\d{4})是一個 ID 為 2 的捕獲組(因為已經有另一個捕獲組, ([ -]?) )和替換模式是一串星號/空格,並以$2結尾,即 Group 2 值的占位符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM