在 C# 中格式化电话号码的最快方法?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/679740/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Fastest way to format a phone number in C#?
提问by Michael Kniskern
What is the fastest way to format a string using the US phone format [(XXX) XXX-XXXX] using c#?
使用 c# 使用美国电话格式 [(XXX) XXX-XXXX] 格式化字符串的最快方法是什么?
My source format is a string.
我的源格式是一个字符串。
采纳答案by BFree
String.Format("{0:(###) ###-#### x ###}", double.Parse("1234567890123"))
Will result in (123) 456-7890 x 123
将导致 (123) 456-7890 x 123
回答by Matt Grande
I would assume it'd be:
我会假设它是:
var number = string.Format("({0}) {1}-{2}", oldNumber.Substring(0, 3), oldNumber.Substring(3, 3), oldNumber.Substring(6));
This assumes that you have the number stored as "1234567890" and want it to be "(123) 456-7890".
这假设您将号码存储为“1234567890”并希望它是“(123) 456-7890”。
回答by BobbyShaftoe
This assumes that you have the phone number with the appropriate number of digits stored like:
这假设您的电话号码存储了适当的数字位数,例如:
string p = "8005551234";
string formatedPhoneNumber = string.Format("({0}) {1}-{2}", p.Substring(0, 3), p.Substring(3, 3), p.Substring(6, 4));
回答by Guffa
This will take a string containing ten digits formatted in any way, for example "246 1377801"
or even ">> Phone:((246)) 13 - 778 - 01 <<"
, and format it as "(246) 137-7801"
:
这将采用包含以任何方式格式化的十位数字的字符串,例如"246 1377801"
或 even ">> 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*$",
"() -");
(If the string doesn't contain exactly ten digits, you get the original string unchanged.)
(如果字符串不完全包含十位数字,则原始字符串不变。)
Edit:
编辑:
A fast ways to build a string is to use a StringBuilder. By setting the capacity to the exact length of the final string you will be working with the same string buffer without any reallocations, and the ToString method will return the buffer itself as the final string.
构建字符串的一种快速方法是使用 StringBuilder。通过将容量设置为最终字符串的确切长度,您将使用相同的字符串缓冲区而无需任何重新分配,并且 ToString 方法会将缓冲区本身作为最终字符串返回。
This assumes that the source string contains only the ten digits:
这假设源字符串仅包含十位数字:
string formatted =
new StringBuilder(14)
.Append('(')
.Append(phoneNumber, 0, 3)
.Append(") ")
.Append(phoneNumber, 3, 3)
.Append('-')
.Append(phoneNumber, 6, 4)
.ToString();
回答by Exel Gamboa
Not the fastest way, but you can use Extension Methods (note that the parameter must be cleaned up of any previous phone format):
不是最快的方法,但可以使用扩展方法(注意参数必须清除任何以前的电话格式):
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;
}
}
Then, use it as
然后,将其用作
myString.ToPhoneFormat();
Modify to your needs if you want to:
如果您想,请根据您的需要进行修改:
- Include phone extension (x1234)
- Clean the parameter of any existing phone format inside the method
- Use dash instead of parenthesis
- Eat a sandwich ... you name it! :)
- 包括电话分机 (x1234)
- 清除方法中任何现有电话格式的参数
- 使用破折号代替括号
- 吃一个三明治......你说出来!:)
You can also use this to format the string in each user input.
您还可以使用它来格式化每个用户输入中的字符串。