我想使用C#格式化電話號碼。格式爲(XX)YYY-ZZZZ或(XXX)YYY-ZZZZ。所以,我需要 來格式化右邊的七位數字,然後剩下的兩個或三個地區代碼。格式化字符串/電話號碼
{編輯}
電話被保存爲一個純字符串/長度9的VARCHAR或10
請提出的解決方案。
謝謝。
我想使用C#格式化電話號碼。格式爲(XX)YYY-ZZZZ或(XXX)YYY-ZZZZ。所以,我需要 來格式化右邊的七位數字,然後剩下的兩個或三個地區代碼。格式化字符串/電話號碼
{編輯}
電話被保存爲一個純字符串/長度9的VARCHAR或10
請提出的解決方案。
謝謝。
是電話號碼存儲爲字符串或數字值。如果它保存爲一個整數值,這個應該這樣做:
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
是的,它被存儲爲字符串。 – DotnetSparrow 2011-05-26 18:07:28
假設的電話號碼存儲作爲一個長期的,並且是9或10個數字,你可以這樣做:
if (number > 999999999L)
{
return String.Format("{0:(###) ###-####}", number);
}
else
{
return String.Format("{0:(##) ###-####}", number);
}
當然這僅在數正好是9或10位長的工作。
如果我理解正確,您需要一個接收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);
}
這將需要任何字符串和從右側位置到第一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());
}
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
你是如何存儲的電話號碼? – CodeNaked 2011-05-26 17:44:02
這可能是一個字符串。那麼正則表達式或拼圖就有可能。 – ibram 2011-05-26 17:47:28
as plain string – DotnetSparrow 2011-05-26 17:47:58