格式化字符串/电话号码
问题描述:
我想使用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
+0
是的,它被存储为字符串。 – 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