使用c#使用美国电话格式[(XXX)XXX-XXXX]格式化字符串的最快方法是什么?
我的源格式是一个字符串。
答案 0 :(得分:48)
String.Format("{0:(###) ###-#### x ###}", double.Parse("1234567890123"))
将导致(123)456-7890 x 123
答案 1 :(得分:7)
这假定您拥有的电话号码包含适当的位数,如:
string p = "8005551234";
string formatedPhoneNumber = string.Format("({0}) {1}-{2}", p.Substring(0, 3), p.Substring(3, 3), p.Substring(6, 4));
答案 2 :(得分:5)
这将采用包含以任何方式格式化的十位数的字符串,例如"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();
答案 3 :(得分:3)
我认为它应该是:
var number = string.Format("({0}) {1}-{2}", oldNumber.Substring(0, 3), oldNumber.Substring(3, 3), oldNumber.Substring(6));
这假设您将号码存储为“1234567890”并希望它为“(123)456-7890”。
答案 4 :(得分:1)
不是最快的方式,但您可以使用扩展方法(请注意,必须清除以前任何电话格式的参数):
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();
如果您想要修改您的需求:
您也可以使用它来格式化每个用户输入中的字符串。