2014-07-15 30 views
0

我希望清理沒有大量代碼的輸入字符串,所以我一直在尋找一個擴展或字符串方法來幫助。令人驚訝的是,我找不到我想要的東西!看看下面的小片段爲例:從字符串中移除字符數組

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

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

我可以寫這樣的:

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

對我來說這是不容易閱讀和可能不是有效的。鑑於我感興趣的代碼很容易閱讀任何建議,以更好的方式來寫這個?這怎麼可能寫成字符串擴展?

一個解決方案...

如果任何人有這個問題 - 這個問題是不是如何只保留號碼,或者如何清理的電話號碼。這只是一個例子來說明這一點。事實上,我需要一種方法來從輸入中刪除特定的無效字符列表。下面,通過「烏斯曼扎法爾」 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);