2012-03-14 3 views
1

과 같이 신용 카드 번호가있는 텍스트가 있습니다. "신용 카드 번호가 4321432143219999입니다. 이것은 실제로 신용 카드입니다!" 텍스트가 있어야한다C# RegEx. 문자로 신용 카드 바꾸기

나는 정규식으로이 번호를 찾아 ************9999로 교체, 그래서 결과를해야합니다 는 "당신의 신용 카드 번호가 ************9999이며,이 정말 당신의 신용 카드입니다!"

C#으로 어떻게 할 수 있습니까?

감사합니다.

+0

[당신은 시도 무엇?] (http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

+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