2014-02-13 90 views
0

我想在這樣的格式來格式化數字作爲字符串:字符串格式固定約束字符,可變字符內

String.Format(phone, "(00) ##000\-0000"); 

所以:

112349999 -> (11) 234-9999 
1123459999 -> (11) 2345-9999 
11234569999 -> (11) 23456-9999 

(將被讀取只是這些手機格式化允許在我的國家)

  1. 在「(XX)」中固定了2個第一個數字。內部數字(其他數字),從「 - 」開始(每個字符從右側插入第6個位置,將另一個數字插入(XX))。

我無法用String.Format()的簡單格式來實現此行爲。

有沒有辦法?

+1

我不認爲一個簡單的格式字符串可以在這裏使用,因爲第二部分有可變的數字位數。我建議簡單的字符串操作。 –

+0

所以你想123456789格式化爲(12)543-6789或(12)345-6789?由於您對後者格式已經有了正確的格式,因此我假定了第一個格式,並且這對於簡單的字符串格式不可行。 – Georg

+0

哦,我很抱歉,這是可疑的..我想(12)345-6789。更新我的問題... –

回答

2
string phone = "112223333"; 
var m = Regex.Match(phone, @"(\d{2})(\d+)(\d{4})"); 
var formatted = String.Format("({0}) {1}-{2}", m.Groups[1].Value, m.Groups[2].Value, m.Groups[3].Value); 
+1

很好的解決方案。對於簡單的情況,「正則表達式」似乎有點沉重,但這很容易擴展到各種各樣的電話格式。 –

0

由於中間部分的位數是可變的,所以在這裏將不能使用String.Format。試試這個:

String.Format("({0}) {1}-{2}", 
    phone.Substring(0, 2), 
    phone.Substring(2, phone.Length - 6), 
    phone.Substring(phone.Length - 4)) 
);