我可以像.NET中的数字一样格式化字符串吗?

时间:2008-10-29 15:47:19

标签: c# .net formatting

如果我有这样的电话号码

string phone = "6365555796";

我在数据库(作为字符串)中只存储了数字字符,是否可以输出如下数字:

"636-555-5796"

类似于我使用数字的方式:

long phone = 6365555796;
string output = phone.ToString("000-000-0000");

我尝试过搜索,我在网上找到的只是数字格式文档。

我问的原因是因为我认为能够仅在数据库中存储数值并允许使用常量字符串值来指定我的电话号码格式的不同格式是一个有趣的想法。或者我最好使用一个号码吗?

编辑:问题是格式化包含数字的字符串,而不是数字本身。

9 个答案:

答案 0 :(得分:7)

最好的我可以想到,而不必转换为长/数字,所以它适合一行是:

string number = "1234567890";
string formattedNumber = string.Format("{0}-{1}-{2}", number.Substring(0,3), number.Substring(3,3), number.Substring(6));

答案 1 :(得分:6)

请注意,并非每个人都使用北美3-3-4格式的电话号码。欧洲电话号码最长可达15位,标点符号很明显,例如: + 44-XXXX-XXXX-XXXX与44 + XXXX-XXXX-XXXX不同。您也没有考虑可能需要超过30位的PBX和分机。

军用和无线电话可以有字母字符,这不是你在按键式电话上看到的“2”=“ABC”。

答案 2 :(得分:6)

简单版本:

string phone = "6365555796";
Convert.ToInt64(phone).ToString("000-000-0000");

围绕它进行一些验证并将其放在一个很好的方法中:

string FormatPhone(string phone)
{
   /*assume the phone string came from the database, so we already know it's
     only digits.  If this changes in the future a simple RegEx can validate 
     (or correct) the digits requirement. */

   // still want to check the length:
   if (phone.Length != 10) throw new InvalidArgumentException();

  return Convert.ToInt64(phone).ToString("000-000-0000");
}

答案 3 :(得分:4)

我认为这有效

string s = string.Format("{0:###-###-####}", ulong.Parse(phone));

此外,这个http://blog.stevex.net/index.php/string-formatting-in-csharp/是关于格式化.NET中字符串的好文章。

感谢@swilliams的澄清。

答案 4 :(得分:1)

为什么不做这样的事情?

string phoneText = "6365555796";
long phoneNum = long.Parse(phoneText);
string output = phoneNum.ToString("000-000-0000");

答案 5 :(得分:1)

我爱我一些扩展方法动作:

   /// <summary>
   ///   Formats a string of nine digits into a U.S. phone number.
   /// </summary>
   /// <param name="value">
   ///   The string to format as a phone number.
   /// </param>
   /// <returns>
   ///   The numeric string as a U.S. phone number.
   /// </returns>
   public static string
   ToUSPhone (this string value)
   {
      if (value == null)
      {
         return null;
      }

      long  dummy;

      if ((value.Length != 10) ||
         !long.TryParse (
            value,
            NumberStyles.None,
            CultureInfo.CurrentCulture,
            out dummy))
      {
         return value;
      }

      return string.Format (
         CultureInfo.CurrentCulture,
         "{0}-{1}-{2}",
         value.Substring (0, 3),
         value.Substring (3, 3),
         value.Substring (6));
   }

答案 6 :(得分:0)

您可能会在给定的字符点处执行字符串插入。有点像: phone = phone.Insert(3,“ - ”); phone = phone.Insert(7,“ - ”);

答案 7 :(得分:0)

不确定

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

当然,now you have 2 problems

答案 8 :(得分:-1)

要控制数字的字符串格式以便在ASP.NET Gridview或其他控件中显示,您可以将项目包装在帮助程序类中以供显示:

public class PhoneDisplay
{
    long phoneNum;
    public PhoneDisplay(long number)
    {
        phoneNum = number;
    }
    public override string ToString()
    {
        return string.Format("{0:###-###-####}", phoneNum);
    }

}

然后,将数据或显示字段定义为(例如):

PhoneDisplay MyPhone = new PhoneDisplay(6365555796);