下面的代码将返回“-1-2346”,如何返回“123-46”?我们将数据库中的电话号码保存为varchar(20),并始终保存10个洋地黄。 asp页面只需显示它是什么。
var phoneNumber = 12346;
var phoneString = String.Format("{0:###-###-####}",12346);
答案 0 :(得分:1)
您可以创建自定义格式提供程序
public class TelephoneFormatter : IFormatProvider, ICustomFormatter
{
public object GetFormat(Type formatType)
{
return formatType == typeof(ICustomFormatter) ? this : null;
}
public string Format(string format, object arg, IFormatProvider formatProvider)
{
var numericString = arg.ToString();
if (format != "###-###-####")
return String.Format(format, arg);
if (numericString.Length <= 3)
return numericString;
if (numericString.Length <= 6)
return numericString.Substring(0, 3) + "-" + numericString.Substring(3, numericString.Length - 3);
if (numericString.Length <= 10)
return numericString.Substring(0, 3) + "-" +
numericString.Substring(3, 3) + "-" + numericString.Substring(4, numericString.Length - 6);
throw new FormatException(
string.Format("'{0}' cannot be used to format {1}.",
format, arg));
}
}
在此之后你可以使用它
public static void Test()
{
Debug.Print(String.Format(new TelephoneFormatter(), "{0:###-###-####}", 0));
Debug.Print(String.Format(new TelephoneFormatter(), "{0:###-###-####}", 911));
Debug.Print(String.Format(new TelephoneFormatter(), "{0:###-###-####}", 12346));
Debug.Print(String.Format(new TelephoneFormatter(), "{0:###-###-####}", 8490216));
Debug.Print(String.Format(new TelephoneFormatter(), "{0:###-###-####}", 4257884748));
}
我希望它会对你有所帮助。
<强>结果强>
0
911
123-46
849-021-2
425-788-8847