Reputation: 25260
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.
Upvotes: 24
Views: 54114
Reputation: 1
private void txtPhone_Update()
{
string phone = "";
string phone1 = "";
int index = 0;
phone = txtPhone.Text;
phone1 = "";
for (index = 0; index < phone.Length; index++)
if (char.IsDigit(phone[index]))
{ phone1 += phone[index]; }
{
if (phone1[0] == '1') { phone1 = phone1.Remove(0, 1); }
{
string number = "";
number = string.Format("({0}) {1}-{2}", phone1.Substring(0, 3), phone1.Substring(3, 3), phone1[6..]);
phone1 = number;
}
}
}
Upvotes: -1
Reputation: 946
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.
Upvotes: 1
Reputation: 103742
String.Format("{0:(###) ###-#### x ###}", double.Parse("1234567890123"))
Will result in (123) 456-7890 x 123
Upvotes: 56
Reputation: 700152
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();
Upvotes: 5
Reputation: 28499
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));
Upvotes: 8
Reputation: 12157
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".
Upvotes: 4