2012-03-14 48 views
1

我有一些內部帶有信用卡號碼的文本,如: 「您的信用卡號碼是4321432143219999,這真的是您的信用卡!」C#RegEx。替換文本中的信用卡

我需要通過正則表達式來找到這個數量和************9999替換它,所以結果文本應爲: 「你的信用卡號碼是************9999,這真的是你的信用卡!」

如何在C#中執行此操作?

謝謝!

+0

[你嘗試過什麼?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – 2012-03-14 11:31:20

+1

@jsobo我相信OP已審議,因爲正則表達式(s)他說:「我需要通過正則表達式」 – Robbie 2012-03-14 11:37:25

+0

什麼是嘗試和沒有工作的示例代碼將使這是一個「真正」的問題。這是要求我們做這個人的工作。 – 2012-03-14 13:03:20

回答

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

這將替換,接着4位的12位的塊(這樣總共16位)與12倍*。數字必須與空格或其他非單詞字符分開。所以A123456789不好,因爲不是123456789A123456789,是可以的,因爲,是非單詞字符。

+0

謝謝你的完美解決方案! – ihorko 2012-03-14 12:06:40

2

儘可能避免使用正則表達式,因爲它們比普通的子字符串操作更慢,更難以排除故障。

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

好的答案通常包括一些解釋,特別是當他們提供了不同的技術解決方案而不是提問者所要求的。 – 2014-06-18 10:32:51

+0

好,所以這是我的意見 - 正則表達式是廢話,不要使用它,當你可以。 – Tommix 2014-06-19 11:13:18