2012-03-06 3 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 메서드를 사용하면 한 줄로 더 효과적으로 작업 할 수 있습니까?

답변

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

charm처럼 일했습니다. :) – Nayan

0

당신은 당신이 정규 표현식을 컴파일 여부 사용 여부를 몇 가지를 고려해야한다 마스킹의 많은 일을하려는 경우.

응용 프로그램을 처음 사용할 때 약간의 지연이 발생하지만 이후에는 더 빨리 실행됩니다.

또한 Regex의 정적 대 인스턴스의 선택을 고려해야합니다.

는 I은 here 마스킹 정규식 검사 여섯 방법/비교가있다

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; 
    } 
} 

가장 효율적 다음 알았다.

관련 문제