将12346格式化为电话号码格式123-46

时间:2014-07-16 18:06:20

标签: c# format string-formatting

下面的代码将返回“-1-2346”,如何返回“123-46”?我们将数据库中的电话号码保存为varchar(20),并始终保存10个洋地黄。 asp页面只需显示它是什么。

var phoneNumber = 12346;
var phoneString = String.Format("{0:###-###-####}",12346);

1 个答案:

答案 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