4

如果我有这样的电话号码

string phone = "6365555796";

我在我的数据库中仅存储数字字符(作为字符串),是否可以像这样输出数字:

"636-555-5796"

类似于我使用数字时的方法:

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

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

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

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

4

9 回答 9

7

我能想到的最好的无需转换为长/数字,因此它适合一行是:

string number = "1234567890";
string formattedNumber = string.Format("{0}-{1}-{2}", number.Substring(0,3), number.Substring(3,3), number.Substring(6));
于 2008-10-29T16:11:47.773 回答
6

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

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

于 2008-10-29T16:23:46.547 回答
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");
}
于 2008-10-29T16:44:29.610 回答
4

我认为这行得通

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

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

感谢@swilliams 的澄清。

于 2008-10-29T16:07:48.827 回答
1

为什么不做这样的事情呢?

string phoneText = "6365555796";
long phoneNum = long.Parse(phoneText);
string output = phoneNum.ToString("000-000-0000");
于 2008-10-29T15:50:54.570 回答
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));
   }
于 2008-10-29T17:23:41.950 回答
0

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

于 2008-10-29T15:52:20.213 回答
0

当然:

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

当然,现在你有两个问题

于 2008-10-29T21:21:57.507 回答
-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);
于 2008-10-29T16:05:03.433 回答