Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#RegEx。用文本替换信用卡_C#_Asp.net_Regex_Replace - Fatal编程技术网

C#RegEx。用文本替换信用卡

C#RegEx。用文本替换信用卡,c#,asp.net,regex,replace,C#,Asp.net,Regex,Replace,我有一些里面有信用卡号码的文字,比如: “您的信用卡号码是4321432143219999,这确实是您的信用卡!” 我需要通过正则表达式查找此编号,并将其替换为*************9999,因此结果文本应为: “您的信用卡号是**********9999,这真是您的信用卡!” 我怎么能用C#做呢 谢谢 var str = "Your credit card number is 4321432143219999, this is really your credit card!"; var

我有一些里面有信用卡号码的文字,比如: “您的信用卡号码是4321432143219999,这确实是您的信用卡!”

我需要通过正则表达式查找此编号,并将其替换为
*************9999
,因此结果文本应为: “您的信用卡号是
**********9999
,这真是您的信用卡!”

我怎么能用C#做呢

谢谢

var str = "Your credit card number is 4321432143219999, this is really your credit card!";
var res = Regex.Replace(str, "[0-9](?=[0-9]{4})", "*");
这将搜索后跟至少4位数字的数字,并将其替换为
*
(因此它将被
123456
愚弄,并在
**3456
中更改它)

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

var res2 = Regex.Replace(str, @"\b[0-9]{12}(?=[0-9]{4}\b)", new string('*', 12));
这将用12x
*
替换一个由12位数字和4位数字组成的块(总共16位)。数字必须用空格或其他非单词字符与其他文本隔开。因此,
1234567890123456
不好,1234567890123456A也不好<代码>1234567890123456,可以,因为
是非单词字符

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

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

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

这将用12x
*
替换一个由12位数字和4位数字组成的块(总共16位)。数字必须用空格或其他非单词字符与其他文本隔开。因此,
1234567890123456
不好,1234567890123456A也不好
1234567890123456,
可以,因为
是非单词字符。

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

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

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

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

@jsobo我相信OP已经考虑了正则表达式,因为他说“我需要通过正则表达式查找”的示例代码中尝试了什么但没有成功,这将使这成为一个“真正的”问题。这是要求我们做这个人的工作。@jsobo我相信OP已经考虑了正则表达式,因为他说“我需要通过正则表达式查找”示例代码中的哪些尝试过,哪些没有成功,这将成为一个“真正的”问题。这是一个要求我们做这个人的工作。谢谢你的完美解决方案!谢谢你的完美解决方案!好的答案通常包括一点解释,特别是当他们提供的技术解决方案与提问者要求的不同时。好吧,这是我的评论-正则表达式是垃圾,尽可能不要使用它。好的答案通常包括一点解释,特别是当他们提供的技术解决方案与提问者要求的不同时。好吧,这是我的评论-正则表达式是垃圾,尽可能不要使用它。