2008-10-29 141 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)); 
    } 
相關問題