Answers:
绝对正则表达式:
string CleanPhone(string phone)
{
Regex digitsOnly = new Regex(@"[^\d]");
return digitsOnly.Replace(phone, "");
}
或在一个类中避免始终创建正则表达式:
private static Regex digitsOnly = new Regex(@"[^\d]");
public static string CleanPhone(string phone)
{
return digitsOnly.Replace(phone, "");
}
根据您的实际输入,您可能希望在那里使用一些其他逻辑来执行某些操作,例如去掉前导1(用于长距离)或尾随x或X(用于扩展)的任何东西。
[^\d]
可以简化为\D
您不需要使用正则表达式。
phone = new String(phone.Where(c => char.IsDigit(c)).ToArray())
system.linq;
为了获得最佳性能并降低内存消耗,请尝试以下操作:
using System;
using System.Diagnostics;
using System.Text;
using System.Text.RegularExpressions;
public class Program
{
private static Regex digitsOnly = new Regex(@"[^\d]");
public static void Main()
{
Console.WriteLine("Init...");
string phone = "001-12-34-56-78-90";
var sw = new Stopwatch();
sw.Start();
for (int i = 0; i < 1000000; i++)
{
DigitsOnly(phone);
}
sw.Stop();
Console.WriteLine("Time: " + sw.ElapsedMilliseconds);
var sw2 = new Stopwatch();
sw2.Start();
for (int i = 0; i < 1000000; i++)
{
DigitsOnlyRegex(phone);
}
sw2.Stop();
Console.WriteLine("Time: " + sw2.ElapsedMilliseconds);
Console.ReadLine();
}
public static string DigitsOnly(string phone, string replace = null)
{
if (replace == null) replace = "";
if (phone == null) return null;
var result = new StringBuilder(phone.Length);
foreach (char c in phone)
if (c >= '0' && c <= '9')
result.Append(c);
else
{
result.Append(replace);
}
return result.ToString();
}
public static string DigitsOnlyRegex(string phone)
{
return digitsOnly.Replace(phone, "");
}
}
我的计算机中的结果是:
初始化...
时间:307
时间:2178
我敢肯定有一种更有效的方法,但是我可能会这样做:
string getTenDigitNumber(string input)
{
StringBuilder sb = new StringBuilder();
for(int i - 0; i < input.Length; i++)
{
int junk;
if(int.TryParse(input[i], ref junk))
sb.Append(input[i]);
}
return sb.ToString();
}
试试这个
public static string cleanPhone(string inVal)
{
char[] newPhon = new char[inVal.Length];
int i = 0;
foreach (char c in inVal)
if (c.CompareTo('0') > 0 && c.CompareTo('9') < 0)
newPhon[i++] = c;
return newPhon.ToString();
}
return newPhone.ToString();
将返回“ System.Char []”。我觉得你的意思return new string(newPhone);
,但是,这也被过滤掉的数字0和9由于>
和<
而不是>=
和<=
。但是即使那样,字符串也将具有尾随空格,因为newPhon
数组的长度超过了所需的长度。