2012-03-14 9 views
1

のようなクレジットカード番号のテキストがあります。「クレジットカード番号は4321432143219999です。これは本当にあなたのクレジットカードです!」C#RegEx。テキストのクレジットカードの交換

私は正規表現でこの番号を見つけると ************9999と交換し、そのテキストのあるべき帰着する必要が

: 「あなたのクレジットカード番号が************9999で、これは本当にあなたのクレジットカードです!」

C#でどうすればいいですか?

ありがとうございます!

+0

[あなたは何を試してみました?](http://mattgemmell.com/2008/12/08/what-have-you-tried/)私はOPがいることを指定した正規表現を考えられていると信じて –

+1

@jsobo彼が "RegExによって見つけ出す必要がある"と答えた – Robbie

+0

試して試したもののサンプルコードは、これを「本当の」質問にするでしょう。これは、私たちがこの人の仕事をするための要求です。 –

答えて

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桁の合計)12X *有します。数字はスペースやその他の単語以外の文字で区切られていなければなりません。だからA123456789は良くない、123456789Aではない。 ,は単語以外の文字であるため、123456789,は大丈夫です。

+0

完璧なソリューションありがとう! – ihorko

2

通常の部分文字列操作よりもトラブルシューティングが遅くて困難なので、可能な限り正規表現は避けるのが最善です。

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

良い回答には、特に質問者とは異なる技術的解決策を提示した場合に、少しの説明が含まれることがあります。 –

+0

これは私のコメントですので、正規表現は駄目です。 – Tommix