C# 正则表达式。在文本中替换信用卡

iho*_*rko 1 c# regex asp.net replace

我有一些带有信用卡号的文字,比如:“你的信用卡号是 4321432143219999,这真的是你的信用卡!”

我需要通过 RegEx 找到这个号码并将其替换为************9999,所以结果文本应该是:“你的信用卡号是************9999,这真的是你的信用卡!”

我怎样才能在 C# 中做到这一点?

谢谢!

xan*_*tos 7

var str = "Your credit card number is 4321432143219999, this is really your credit card!";
var res = Regex.Replace(str, "[0-9](?=[0-9]{4})", "*");
Run Code Online (Sandbox Code Playgroud)

这将搜索后跟至少 4 位数字的数字并将其替换为*(因此它会被愚弄123456并更改为**3456

如果您的信用卡号是 16 位数字:

var res2 = Regex.Replace(str, @"\b[0-9]{12}(?=[0-9]{4}\b)", new string('*', 12));
Run Code Online (Sandbox Code Playgroud)

这将用 12x 替换 12 位数字后跟 4 位数字(总共 16 位数字)的块*。数字必须与其他文本用空格或其他非单词字符分隔。所以A1234567890123456不好,也不是1234567890123456A1234567890123456,没问题,因为,是一个非单词字符。


Tom*_*mix 5

最好尽可能避免使用正则表达式,因为它们比普通的子字符串操作更慢且更难排除故障。

    public static string HideNumber(string number)
    {
        string hiddenString = number.Substring(number.Length - 4).PadLeft(number.Length, '*');
        return hiddenString;
    }
Run Code Online (Sandbox Code Playgroud)