2014-07-15 5 views
0

도움이되는 확장 또는 문자열 메서드를 찾고 있었기 때문에 입력 문자열을 많은 코드없이 정리하고 싶습니다. 놀랍게도, 나는 내가 찾고있는 것을 정말로 발견 할 수 없었다! 예를 들어 다음과 같은 짧은 조각을 받아이 읽기 쉬운 일이 아니다 아마 그 효율적이지 나에게문자열에서 문자 배열을 제거하십시오.

var number = "(999) 123-1123 x334"; 
var invalidChars = new []{'-', '.', ' ', ')', '(', 'x', 'X'}; 
for (int i = 0; i < number.Length; i++) { 
    if (invalidChars.Contains(number[i])) { 
     number = number.Remove(i, 1); 
     i--; 
    } 
} 

: 내가 좋아하는 뭔가를 쓸 수

var number = "(999) 123-1123 x334"; 

// this is what I *want* (it doesn't exist): 
var cleanedNumber = number.Replace(new []{'-', '.', ' ', ')', '(', 'x', 'X'}, ''); 

. 이것을 작성하는 더 좋은 방법에 대한 제안을 읽기 쉬운 코드에 관심이 있다고 가정하면? 이것은 어떻게 문자열 확장자로 쓰여질 수 있습니까? 경우 다른 사람에

하나의 솔루션 ...

이 문제를 가지고 - 문제는 숫자 만 유지하거나 어떻게 전화 번호를 정화하는 방법이 아니었다. 이것은 요점을 설명하기위한 예일뿐입니다. 사실 입력에서 잘못된 문자의 특정 목록을 제거하는 방법이 필요했습니다. "우스만 자파르"here하여 답변에 따라 다음은, 내가 필요로 무엇을 수행하고 아주 간단 보인다 : 모든 도움

if (string.IsNullOrWhiteSpace(number)) return number; 
var invalidChars = new[] { '-', '.', ' ', ')', '(', 'x', 'X' }; 
return new String(number.Where(c => !invalidChars.Contains(c)).ToArray()); 

감사합니다!

+1

는 ... 같은 Q는 더 많거나 적은 .. - 라인의 몇 수행 작업 http://stackoverflow.com/questions/262448를 가져옵니다/replace-non-numeric-with-empty-string - Usman Zafar의 답변보기; RegEx보다 나은 방법 – Darren

+0

@ Darren Usman Zafar의 대답에 대한 해결책을 기반으로했습니다. 전화 번호는이 루틴이 사용 된 한 가지 예일뿐입니다. 이것은 레거시 응용 프로그램이므로 모든 입력이이 루틴을 통해 클린업을 통해 전송되므로 숫자 만 유지할 수는 없으므로 잘못된 문자 (해당 솔루션의 반대)를 무시해야합니다. 조언 해주셔서 감사합니다! –

답변

1

하나의 간단한 해결책은 다음 Split, Concat (또는 Join)를 사용하는 것입니다 :

var cleanedNumber = string.Concat(number.Split('-', '.', ' ', ')', '(', 'x', 'X')); 

을 또는 당신은 Linq에 약간 사용할 수 있습니다

var cleanedNumber = new string(number.Where(char.IsDigit).ToArray()); 

아니면 regular expression :

var cleanedNumber = Regex.Replace(number, @"\D", ""); 

참고 : 마지막 두 가지 해결 방법은 숫자가 아닌 문자를 제거합니다.

0

당신은 정규 표현식을 사용할 수 있습니다 : 당신이 가서 여기

var cleanedNumber = Regex.Replace(number, "[-\.)(xX]", string.Empty); 
관련 문제