What is the fastest way to format a string using the US phone format [(XXX) XXX-XXXX] using c#?
My source format is a string.
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"
:
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");
(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.
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();
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".
String.Format("{0:(###) ###-#### x ###}", double.Parse("1234567890123"))
Will result in (123) 456-7890 x 123
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:
You can also use this to format the string in each user input.
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));