2008-10-29 84 views
4

如果我有这样的我可以在.NET中格式化一个字符串吗?

string phone = "6365555796"; 

我与仅由数字存储在我的数据库(字符串)一个电话号码,是有可能输出这样的数字:

"636-555-5796" 

如何,我可以,如果我使用了一些类似:

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

我试着搜索和所有我能科幻nd online是数字格式文件。

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

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

+0

我删除了我原来的答案,并编辑了问题以澄清为什么我错了。 – swilliams 2008-10-29 17:19:27

回答

7

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

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

为什么不只是做这样的事情?

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

这是一个有趣的想法,但如果我想将数字包含在ASP.NET Gridview或Repeater中,则需要额外的代码才能正确输出数字。我想知道是否有一个单线.NET函数,我可以忽略... – 2008-10-29 15:52:38

+0

你已经有swilliams的答案。但是,如果您使用匿名代理,则可以在“一行”中使用此功能。 – 2008-10-29 15:57:00

+0

如果数字已经领先0,那么你可能会得到错误的输出 – faulty 2008-10-29 15:58:00

0

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

+0

这是“慢”,因为它会导致大量的字符串创建。 – 2008-10-29 15:53:29

-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); 
6

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

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

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"); 
} 
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)); 
    } 
相关问题