我希望清理沒有大量代碼的輸入字符串,所以我一直在尋找一個擴展或字符串方法來幫助。令人驚訝的是,我找不到我想要的東西!看看下面的小片段爲例:從字符串中移除字符數組
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());
感謝所有幫助!
在這裏你去...同樣Q,或多或少.. - 幾行幹得不錯http://stackoverflow.com/questions/262448/replace-non-numeric-with-empty-string - 查看Usman Zafar的答案;比RegEx更好的方法 – Darren
@Darren我根據Usman Zafar的解答找到了答案。電話號碼只是使用此例程的一個例子。由於這是一個遺留應用程序,我不知道通過這個例程發送的所有輸入是否需要清理,因此我不能只保留數字,而是需要丟棄無效字符(反向解決方案)。感謝您的建議! –