You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决全零字符串无法通过Convert.ToInt64格式化为###-###-####电话号码的问题?

解决电话号码格式化中全零字符串的问题

这个坑我之前踩过!把电话号码转成Int64再用###-###-####格式化的思路,本质上是把电话号码当成了数值来处理,但电话号码其实是字符串类型——转数值不仅会丢失前导零,遇到全零字符串时,因为转成数值后是0,用###占位符会因为没有足够的数字位导致格式错乱。

给你几个实用的解决方案,按推荐程度排序:

方案1:直接操作字符串(最稳妥)

既然电话号码是字符串,直接对10位数字串做截取拼接是最可靠的,完全避免数值转换的问题:

public static string FormatPhoneNumber(string number)
{
    // 先校验输入是否为10位纯数字
    if (string.IsNullOrWhiteSpace(number) 
        || number.Length != 10 
        || !number.All(char.IsDigit))
    {
        // 处理无效输入,这里返回原字符串,你也可以根据需求抛出异常或返回默认值
        return number;
    }
    
    // 按位置截取拼接
    return $"{number.Substring(0, 3)}-{number.Substring(3, 3)}-{number.Substring(6, 4)}";
}

不管输入是0000000000还是1234567890,都能精准输出000-000-0000或123-456-7890,还能保留前导零。

方案2:修改格式字符串(快速修复)

如果你坚持想用数值转换的方式,只需要把格式字符串里的###换成000就行——0占位符会强制补零,而不是只显示存在的数字:

// 前提是输入number是10位纯数字字符串
string formatted = long.Parse(number).ToString("000-000-0000");

测试一下:0000000000转成long是0,用这个格式会输出000-000-0000,完美解决你的问题。不过要注意,如果输入长度超过10位,long.Parse会溢出,所以最好先做长度校验。

方案3:正则表达式(适配复杂输入)

如果你的输入可能包含空格、括号、横杠等干扰字符(比如(000) 000-0000),用正则先清理再格式化会更灵活:

using System.Text.RegularExpressions;

public static string FormatPhoneNumber(string number)
{
    // 先移除所有非数字字符
    string cleanedNumber = Regex.Replace(number, @"[^\d]", "");
    
    // 校验清理后是否为10位
    if (cleanedNumber.Length != 10)
    {
        return number;
    }
    
    // 正则分组替换成目标格式
    return Regex.Replace(cleanedNumber, @"(\d{3})(\d{3})(\d{4})", "$1-$2-$3");
}

这个方案能处理各种“不标准”的输入,同时正确格式化全零的情况。


内容的提问来源于stack exchange,提问作者dconner2006

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:00:18