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

本文关键字:电话号码 123-46格式 格式化 12346 | 更新日期: 2023-09-27 18:13:23

下面代码会返回"-1-2346",怎么返回"123-46"呢?我们将数据库中的电话号码保存为varchar(20),并且始终为10 digitalis。Asp页面只需要显示它是什么

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

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

您可以创建自定义格式提供程序

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