我想使用C#格式化电话号码。格式为(XX) YYY-ZZZZ或(XXX) YYY-ZZZZ。因此,我需要格式化正确的七位数,然后剩下两到三位用于区号。
{编辑}
Phone另存为长度为9或10的普通字符串/VARChar
请建议解决方案。
谢谢。
发布于 2011-05-27 01:49:01
存储为字符串或数字值的电话号码。如果它被存储为整数值,那么应该可以这样做:
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发布于 2011-05-27 01:46:12
如果我没理解错的话,您想要一个接收int并返回带有string格式的fone数字的函数。如果是这样的话,你可以这样做:
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);
}发布于 2011-05-27 01:45:53
假设电话号码存储为长数字,并且是9位或10位数字,您可以执行以下操作:
if (number > 999999999L)
{
return String.Format("{0:(###) ###-####}", number);
}
else
{
return String.Format("{0:(##) ###-####}", number);
}当然,只有当数字恰好是9或10位数长度时,这才有效。
https://stackoverflow.com/questions/6142774
复制相似问题