Использование RegEx является одним из решений. Другой способ - использовать LINQ (при условии, что вы используете .Net 3.5)
string myPhone = "+1 (123) 123-1234";
string StrippedPhone = new string((from c in myPhone
where Char.IsDigit(c)
select c).ToArray());
Конечный результат тот же, но я думаю, что LINQ предлагает некоторые преимущества по сравнению с RegEx в этом случае. Во-первых, читаемость. RegEx требует, чтобы вы знали, что «D» означает «не цифра» (по сравнению с Char.IsDigit ()) - здесь есть путаница в комментариях. Кроме того, я сделал очень простой тест, выполняя каждый метод 100 000 раз.
LINQ: 127 мс
RegEx: 485 мс
Итак, на первый взгляд кажется, что LINQ out выполняет Regex в этой ситуации. И я бы сказал, что это более читабельно.
int i;
int TIMES = 100000;
Stopwatch sw = new Stopwatch();
string myPhone = "+1 (123) 123-1234";
// Using LINQ
sw.Start();
for (i = 0; i < TIMES; i++)
{
string StrippedPhone = new string((from c in myPhone
where Char.IsDigit(c)
select c).ToArray());
}
sw.Stop();
Console.WriteLine("Linq took {0}ms", sw.ElapsedMilliseconds);
// Reset
sw.Reset();
// Using RegEx
sw.Start();
for (i = 0; i < TIMES; i++)
{
string digits = Regex.Replace(myPhone, @"\D", string.Empty);
}
sw.Stop();
Console.WriteLine("RegEx took {0}ms", sw.ElapsedMilliseconds);
Console.ReadLine();