2012-03-06 8 views
2

"123-12-1234"にあるSSNを "XXX-XX-1234"にマスキングしようとしています。私は以下のコードを使用して達成することができます。正規表現を使用したSSNマスキング

string input = " 123-12-1234 123-11-1235 "; 

Match m = Regex.Match(input, @"((?:\d{3})-(?:\d{2})-(?<token>\d{4}))"); 

while (m.Success) 
{ 
    if (m.Groups["token"].Length > 0) 
    { 
     input = input.Replace(m.Groups[0].Value,"XXX-XX-"+ m.Groups["token"].Value); 
    } 
    m = m.NextMatch(); 
} 

Regex.Replaceメソッドを使用すると、1行でより良い方法がありますか?

答えて

4

あなたは次のことを試すことができます。

string input = " 123-12-1234 123-11-1235"; 

string pattern = @"(?:\d{3})-(?:\d{2})-(\d{4})"; 
string result = Regex.Replace(input, pattern, "XXX-XX-$1"); 

Console.WriteLine(result); // XXX-XX-1234 XXX-XX-1235 
+0

はチャームのように働いています:) – Nayan

0

あなたのアールはあなたがコンパイルされた正規表現を使用するかどうか、いくつかを検討すべきであるマスキングをたくさんやってするつもりならば。

これらを使用すると、アプリケーションが最初に実行されたときにわずかな遅延が発生しますが、その後は高速に実行されます。

また、正規表現の静的対インスタンスの選択も考慮する必要があります。

私はhereをマスキング正規表現チェック/のための6つの方法の比較があり、次は、最も効率的な

public class SSNFormatter 
{ 
    private const string IncomingFormat = @"^(\d{3})-(\d{2})-(\d{4})$"; 
    private const string OutgoingFormat = "xxxx-xx-$3"; 

    readonly Regex regexCompiled = new Regex(IncomingFormat, RegexOptions.Compiled); 

    public string SSNMask(string ssnInput) 
    { 
     var result = regexCompiled.Replace(ssnInput, OutgoingFormat); 
     return result; 
    } 
} 

であることが判明。