用C#格式化电话号码的最快方法?

使用美国电话格式[(XXX)XXX-XXXX]使用c#格式化字符串的最快方法是什么?

我的源格式是一个字符串。

String.Format("{0:(###) ###-#### x ###}", double.Parse("1234567890123")) 

将导致(123)456-7890 x 123

这假定您拥有的电话号码包含适当的位数,如:

 string p = "8005551234"; string formatedPhoneNumber = string.Format("({0}) {1}-{2}", p.Substring(0, 3), p.Substring(3, 3), p.Substring(6, 4)); 

这将采用包含以任何方式格式化的十位数的字符串,例如"246 1377801"或甚至">> Phone:((246)) 13 - 778 - 01 <<" ,并将其格式化为"(246) 137-7801"

 string formatted = Regex.Replace( phoneNumber, @"^\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*$", "($1$2$3) $4$5$6-$7$8$9$10"); 

(如果字符串不包含十位数字,则原始字符串不变。)

编辑:

构建字符串的快速方法是使用StringBuilder。 通过将容量设置为最终字符串的精确长度,您将使用相同的字符串缓冲区而不进行任何重新分配,并且ToString方法将返回缓冲区本身作为最终字符串。

这假设源字符串仅包含十位数字:

 string formatted = new StringBuilder(14) .Append('(') .Append(phoneNumber, 0, 3) .Append(") ") .Append(phoneNumber, 3, 3) .Append('-') .Append(phoneNumber, 6, 4) .ToString(); 

我认为它是:

 var number = string.Format("({0}) {1}-{2}", oldNumber.Substring(0, 3), oldNumber.Substring(3, 3), oldNumber.Substring(6)); 

这假定您将数字存储为“1234567890”并希望它为“(123)456-7890”。

不是最快的方法,但您可以使用扩展方法(请注意,必须清除以前任何电话格式的参数):

 public static class StringFormatToWhatever { public static string ToPhoneFormat(this string text) { string rt = ""; if (text.Length > 0) { rt += '('; int n = 1; foreach (char c in text) { rt += c; if (n == 3) { rt += ") "; } else if (n == 6) { rt += "-"; } n++; } } return rt; } } 

然后,用它作为

 myString.ToPhoneFormat(); 

如果您想要修改以满足您的需求:

  • 包括电话分机(x1234)
  • 清除方法内任何现有手机格式的参数
  • 使用破折号代替括号
  • 吃三明治……你说出来! 🙂

您还可以使用它来格式化每个用户输入中的字符串。