Blog coding and discussion of coding about JavaScript, PHP, CGI, general web building etc.

Friday, February 12, 2016

How to format a string as a telephone number in C#

How to format a string as a telephone number in C#


I have a string "1112224444' it is a telephone number. I want to format as 111-222-4444 before I store it in a file. It is on a datarecord and I would prefer to be able to do this without assigning a new variable.

I was thinking:

String.Format("{0:###-###-####}", i["MyPhone"].ToString() );  

but that does not seem to do the trick.

** UPDATE **

Ok. I went with this solution

Convert.ToInt64(i["Customer Phone"]).ToString("###-###-#### ####")  

Now its gets messed up when the extension is less than 4 digits. It will fill in the numbers from the right. so

1112224444 333  becomes    11-221-244 3334  

Any ideas?

Answer by mattruma for How to format a string as a telephone number in C#


As far as I know you can't do this with string.Format ... you would have to handle this yourself. You could just strip out all non-numeric characters and then do something like:

string.Format("({0}) {1}-{2}",       phoneNumber.Substring(0, 3),       phoneNumber.Substring(3, 3),       phoneNumber.Substring(6));  

This assumes the data has been entered correctly, which you could use regular expressions to validate.

Answer by Jon Skeet for How to format a string as a telephone number in C#


You'll need to break it into substrings. While you could do that without any extra variables, it wouldn't be particularly nice. Here's one potential solution:

string phone = i["MyPhone"].ToString();  string area = phone.Substring(0, 3);  string major = phone.Substring(3, 3);  string minor = phone.Substring(6);  string formatted = string.Format("{0}-{1}-{2}", area, major, minor);  

Answer by Joel Coehoorn for How to format a string as a telephone number in C#


If you can get i["MyPhone"] as a long, you can use the long.ToString() method to format it:

Convert.ToLong(i["MyPhone"]).ToString("###-###-####");  

See the MSDN page on Numeric Format Strings.

Be careful to use long rather than int: int could overflow.

Answer by Ryan Duffield for How to format a string as a telephone number in C#


I prefer to use regular expressions:

Regex.Replace("1112224444", @"(\d{3})(\d{3})(\d{4})", "$1-$2-$3");  

Answer by Sean for How to format a string as a telephone number in C#


From a good page full of examples:

String.Format("{0:(###) ###-####}", 8005551212);        This will output "(800) 555-1212".  

Although a regex may work even better, keep in mind the old programming quote:

Some people, when confronted with a problem, think ?I know, I?ll use regular expressions.? Now they have two problems.
--Jamie Zawinski, in comp.lang.emacs

Answer by Sachin Ranadive for How to format a string as a telephone number in C#


Use Match in Regex to split, then output formatted string with match.groups

Regex regex = new Regex(@"(?\d{3})(?\d{3})(?\d{4})");  Match match = regex.Match(phone);  if (match.Success) return "(" + match.Groups["first3chr"].ToString() + ")" + " " +     match.Groups["next3chr"].ToString() + "-" + match.Groups["next4chr"].ToString();  

Answer by Arin for How to format a string as a telephone number in C#


Function FormatPhoneNumber(ByVal myNumber As String)      Dim mynewNumber As String      mynewNumber = ""      myNumber = myNumber.Replace("(", "").Replace(")", "").Replace("-", "")      If myNumber.Length < 10 Then          mynewNumber = myNumber      ElseIf myNumber.Length = 10 Then          mynewNumber = "(" & myNumber.Substring(0, 3) & ") " &                  myNumber.Substring(3, 3) & "-" & myNumber.Substring(6, 3)      ElseIf myNumber.Length > 10 Then          mynewNumber = "(" & myNumber.Substring(0, 3) & ") " &                  myNumber.Substring(3, 3) & "-" & myNumber.Substring(6, 3) & " " &                  myNumber.Substring(10)      End If      Return mynewNumber  End Function  

Answer by Mak for How to format a string as a telephone number in C#


public string phoneformat(string phnumber)  {  String phone=phnumber;  string countrycode = phone.Substring(0, 3);   string Areacode = phone.Substring(3, 3);   string number = phone.Substring(6,phone.Length);     phnumber="("+countrycode+")" +Areacode+"-" +number ;    return phnumber;  }  

Output will be :001-568-895623

Answer by Larry Smithmier for How to format a string as a telephone number in C#


To take care of your extension issue, how about:

string formatString = "###-###-#### ####";  returnValue = Convert.ToInt64(phoneNumber)                       .ToString(formatString.Substring(0,phoneNumber.Length+3))                       .Trim();  

Answer by Vivek Shenoy for How to format a string as a telephone number in C#


This should work:

String.Format("{0:(###)###-####}", Convert.ToInt64("1112224444"));  

OR in your case:

String.Format("{0:###-###-####}", Convert.ToInt64("1112224444"));  

Answer by Humberto Moreno for How to format a string as a telephone number in C#


Try this

string result;  if ( (!string.IsNullOrEmpty(phoneNumber)) && (phoneNumber.Length >= 10 ) )      result = string.Format("{0:(###)###-"+new string('#',phoneNumber.Length-6)+"}",      Convert.ToInt64(phoneNumber)      );  else      result = phoneNumber;  return result;  

Cheers.

Answer by Jerry Nixon - MSFT for How to format a string as a telephone number in C#


I suggest this as a clean solution for US numbers.

public static string PhoneNumber(string value)  {       value = new System.Text.RegularExpressions.Regex(@"\D")          .Replace(value, string.Empty);      value = value.TrimStart('1');      if (value.Length == 7)          return Convert.ToInt64(value).ToString("###-####");      if (value.Length == 10)          return Convert.ToInt64(value).ToString("###-###-####");      if (value.Length > 10)          return Convert.ToInt64(value)              .ToString("###-###-#### " + new String('#', (value.Length - 10)));      return value;  }  

Answer by underscore for How to format a string as a telephone number in C#


static string FormatPhoneNumber( string phoneNumber ) {       if ( String.IsNullOrEmpty(phoneNumber) )        return phoneNumber;       Regex phoneParser = null;     string format     = "";       switch( phoneNumber.Length ) {          case 5 :           phoneParser = new Regex(@"(\d{3})(\d{2})");           format      = "$1 $2";         break;          case 6 :           phoneParser = new Regex(@"(\d{2})(\d{2})(\d{2})");           format      = "$1 $2 $3";         break;          case 7 :           phoneParser = new Regex(@"(\d{3})(\d{2})(\d{2})");           format      = "$1 $2 $3";         break;          case 8 :           phoneParser = new Regex(@"(\d{4})(\d{2})(\d{2})");           format      = "$1 $2 $3";         break;          case 9 :           phoneParser = new Regex(@"(\d{4})(\d{3})(\d{2})(\d{2})");           format      = "$1 $2 $3 $4";         break;          case 10 :           phoneParser = new Regex(@"(\d{3})(\d{3})(\d{2})(\d{2})");           format      = "$1 $2 $3 $4";         break;          case 11 :           phoneParser = new Regex(@"(\d{4})(\d{3})(\d{2})(\d{2})");           format      = "$1 $2 $3 $4";         break;          default:          return phoneNumber;       }//switch       return phoneParser.Replace( phoneNumber, format );    }//FormatPhoneNumber        enter code here  

Answer by Kent Cooper for How to format a string as a telephone number in C#


Not to resurrect an old question but figured I might offer at least a slightly easier to use method, if a little more complicated of a setup.

So if we create a new custom formatter we can use the simpler formatting of string.Format without having to convert our phone number to a long

So first lets create the custom formatter:

using System;  using System.Globalization;  using System.Text;    namespace System  {      ///       ///     A formatter that will apply a format to a string of numeric values.      ///       ///       ///     The following example converts a string of numbers and inserts dashes between them.      ///           /// public class Example      /// {      ///      public static void Main()      ///      {                ///          string stringValue = "123456789";      ///        ///          Console.WriteLine(String.Format(new NumericStringFormatter(),      ///                                          "{0} (formatted: {0:###-##-####})",stringValue));      ///      }      ///  }      ///  //  The example displays the following output:      ///  //      123456789 (formatted: 123-45-6789)      ///        ///       public class NumericStringFormatter : IFormatProvider, ICustomFormatter      {          ///           ///     Converts the value of a specified object to an equivalent string representation using specified format and          ///     culture-specific formatting information.          ///           /// A format string containing formatting specifications.          /// An object to format.          /// An object that supplies format information about the current instance.          ///           ///     The string representation of the value of , formatted as specified by          ///      and .          ///           ///           public string Format(string format, object arg, IFormatProvider formatProvider)          {              var strArg = arg as string;                //  If the arg is not a string then determine if it can be handled by another formatter              if (strArg == null)              {                  try                  {                      return HandleOtherFormats(format, arg);                  }                  catch (FormatException e)                  {                      throw new FormatException(string.Format("The format of '{0}' is invalid.", format), e);                  }              }                // If the format is not set then determine if it can be handled by another formatter              if (string.IsNullOrEmpty(format))              {                  try                  {                      return HandleOtherFormats(format, arg);                  }                  catch (FormatException e)                  {                      throw new FormatException(string.Format("The format of '{0}' is invalid.", format), e);                  }              }              var sb = new StringBuilder();              var i = 0;                foreach (var c in format)              {                  if (c == '#')                  {                      if (i < strArg.Length)                      {                          sb.Append(strArg[i]);                      }                      i++;                  }                  else                  {                      sb.Append(c);                  }              }                return sb.ToString();          }            ///           ///     Returns an object that provides formatting services for the specified type.          ///           /// An object that specifies the type of format object to return.          ///           ///     An instance of the object specified by , if the          ///      implementation can supply that type of object; otherwise, null.          ///           public object GetFormat(Type formatType)          {              // Determine whether custom formatting object is requested.               return formatType == typeof(ICustomFormatter) ? this : null;          }            private string HandleOtherFormats(string format, object arg)          {              if (arg is IFormattable)                  return ((IFormattable)arg).ToString(format, CultureInfo.CurrentCulture);              else if (arg != null)                  return arg.ToString();              else                  return string.Empty;          }      }  }  

So then if you want to use this you would do something this:

String.Format(new NumericStringFormatter(),"{0:###-###-####}", i["MyPhone"].ToString());  

Some other things to think about:

Right now if you specified a longer formatter than you did a string to format it will just ignore the additional # signs. For example this String.Format(new NumericStringFormatter(),"{0:###-###-####}", "12345"); would result in 123-45- so you might want to have it take some kind of possible filler character in the constructor.

Also I didn't provide a way to escape a # sign so if you wanted to include that in your output string you wouldn't be able to the way it is right now.

The reason I prefer this method over Regex is I often have requirements to allow users to specify the format themselves and it is considerably easier for me to explain how to use this format than trying to teach a user regex.

Also the class name is a bit of misnomer since it actually works to format any string as long as you want to keep it in the same order and just inject characters inside of it.

Answer by Rama Krshna Ila for How to format a string as a telephone number in C#


The following will work with out use of regular expression

string primaryContactNumber = !string.IsNullOrEmpty(formData.Profile.Phone) ? String.Format("{0:###-###-####}", long.Parse(formData.Profile.Phone)) : "";  

If we dont use long.Parse , the string.format will not work.


Fatal error: Call to a member function getElementsByTagName() on a non-object in D:\XAMPP INSTALLASTION\xampp\htdocs\endunpratama9i\www-stackoverflow-info-proses.php on line 72

0 comments:

Post a Comment

Popular Posts

Powered by Blogger.