2011-05-26 233 views
3

我想使用C#格式化電話號碼。格式爲(XX)YYY-ZZZZ或(XXX)YYY-ZZZZ。所以,我需要 來格式化右邊的七位數字,然後剩下的兩個或三個地區代碼。格式化字符串/電話號碼

{編輯}

電話被保存爲一個純字符串/長度9的VARCHAR或10

請提出的解決方案。

謝謝。

+0

你是如何存儲的電話號碼? – CodeNaked 2011-05-26 17:44:02

+0

這可能是一個字符串。那麼正則表達式或拼圖就有可能。 – ibram 2011-05-26 17:47:28

+0

as plain string – DotnetSparrow 2011-05-26 17:47:58

回答

0

是電話號碼存儲爲字符串或數字值。如果它保存爲一個整數值,這個應該這樣做:

string formattedPhone = rawNumber.ToString("(#00) 000-0000") ; 

如果它被存儲爲一個字符串,你需要看的長度和開始砍伐它,這樣的:

static string FormatAsPhoneNumber(string s) 
{ 
    if (s == null) throw new ArgumentNullException() ; 
    if (s.Length > 10) throw new ArgumentOutOfRangeException() ; 

    StringBuilder sb = new StringBuilder() ; 
    int   p = 0 ; 
    int   remaining = s.Length ; 

    if (remaining > 7) 
    { 
    int areaCodeLength = remaining - 7 ; 

    sb.Append("(").Append(s.Substring(p,areaCodeLength)).Append(") ") ; 

    p   += areaCodeLength ; 
    remaining -= areaCodeLength ; 

    } 
    if (remaining > 4) 
    { 
    int exchangeLength = remaining - 4 ; 

    sb.Append(s.Substring(p,exchangeLength)).Append("-") ; 

    p   += exchangeLength ; 
    remaining -= exchangeLength ; 

    } 

    sb.Append(s.Substring(p)) ; 

    string formatted = sb.ToString() ; 
    return formatted ; 
} 

結果:

Raw   Formatted 
---------- -------------- 
1   1 
12   12 
123  123 
1234  1234 
12345  1-2345 
123456  12-3456 
1234567 123-4567 
12345678 (1) 234-5678 
123456789 (12) 345-6789 
1234567890 (123) 456-7890 
+0

是的,它被存儲爲字符串。 – DotnetSparrow 2011-05-26 18:07:28

1

假設的電話號碼存儲作爲一個長期的,並且是9或10個數字,你可以這樣做:

if (number > 999999999L) 
{ 
    return String.Format("{0:(###) ###-####}", number); 
} 
else 
{ 
    return String.Format("{0:(##) ###-####}", number); 
} 

當然這僅在數正好是9或10位長的工作。

2

如果我理解正確,您需要一個接收int的函數,並返回帶有該格式的fone號碼的string。如果是這樣,你可以做這樣的事情:

public string GetPhoneNumber(int number) { 
    string n = number.ToString(); 
    if (n.Length == 9) 
     return "(" + n.Substring(0, 2) + ") " + n.Substring(2, 3) + "-" + n.Substring(5, 4); 
    else 
     return "(" + n.Substring(0, 3) + ") " + n.Substring(3, 3) + "-" + n.Substring(6, 4); 
} 
1

這將需要任何字符串和從右側位置到第一10個號碼開始到

(?xxx)xxx-xxxx

格式化字符串。

public string FormatPhone(string input) 
    { 
     List<char> chars = new List<char>(); 
     if (input.Length < 9) throw new ArgumentException("Not long enough!"); 
     for (int i = input.Length - 1; i >= 0; i--) 
     { 
      if (Char.IsNumber(input[i])) chars.Add(input[i]); 
      switch (chars.Count) 
      { 
       case 4: 
        chars.Add('-'); 
        break; 
       case 8: 
        chars.Add(' '); 
        chars.Add(')'); 
        break; 
       case 13: 
        i = 0; 
        break; 
      } 
     } 
     chars.Add('('); 
     chars.Reverse(); 
     return new string(chars.ToArray()); 
    } 
0
static string FormatPhoneNumber(string phoneNumber) { 

    if (String.IsNullOrEmpty(phoneNumber)) 
     return phoneNumber; 

    Regex phoneParser = null; 
    string format  = ""; 

    switch(phoneNumber.Length) { 

     case 5 : 
     phoneParser = new Regex(@"(\d{3})(\d{2})"); 
     format  = "$1 $2"; 
     break; 

     case 6 : 
     phoneParser = new Regex(@"(\d{2})(\d{2})(\d{2})"); 
     format  = "$1 $2 $3"; 
     break; 

     case 7 : 
     phoneParser = new Regex(@"(\d{3})(\d{2})(\d{2})"); 
     format  = "$1 $2 $3"; 
     break; 

     case 8 : 
     phoneParser = new Regex(@"(\d{4})(\d{2})(\d{2})"); 
     format  = "$1 $2 $3"; 
     break; 

     case 9 : 
     phoneParser = new Regex(@"(\d{4})(\d{3})(\d{2})(\d{2})"); 
     format  = "$1 $2 $3 $4"; 
     break; 

     case 10 : 
     phoneParser = new Regex(@"(\d{3})(\d{3})(\d{2})(\d{2})"); 
     format  = "($1) $2 $3 $4"; 
     break; 

     case 11 : 
     phoneParser = new Regex(@"(\d{4})(\d{3})(\d{2})(\d{2})"); 
     format  = "($1) $2 $3 $4"; 
     break; 

     default: 
     return phoneNumber; 

    }//switch 

    return phoneParser.Replace(phoneNumber, format); 

}//FormatPhoneNumber