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

如何在PhoneNumber模型类实现手机号自动加连字符及格式验证

解决手机号输入自动格式化的双连字符问题

修复后的JavaScript代码

$("#numberInput").on('input', function(event) {
    // 仅保留数字,且限制最多10位
    let input = $(this).val().replace(/\D/g, '').slice(0, 10);
    let formattedInput = '';
    
    // 分阶段添加连字符:3位后、6位后
    if (input.length > 3) {
        formattedInput += input.slice(0, 3) + '-';
        if (input.length > 6) {
            formattedInput += input.slice(3, 6) + '-';
            formattedInput += input.slice(6);
        } else {
            formattedInput += input.slice(3);
        }
    } else {
        formattedInput = input;
    }
    
    $(this).val(formattedInput);
});

原代码问题分析

你之前的正则/(\d{3})(\d{3})?(\d*)/在替换时,当输入数字不足6位时,第二个捕获组$2为空,导致替换结果变成$1-$2$3 → 123--xxxx(空的$2会让两个连字符连在一起),这就是出现双连字符的核心原因。

后端补充验证(C#)

前端验证仅用于提升用户体验,后端必须做校验防止非法数据提交。给PhoneNumber类添加数据验证属性:

using System.ComponentModel.DataAnnotations;

public class PhoneNumber
{
    // 验证格式化后的手机号格式
    [RegularExpression(@"^\d{3}-\d{3}-\d{4}$", ErrorMessage = "手机号格式必须为123-456-7890")]
    public string PhoneNumber { get; set; }
}

如果后端需要存储纯数字,可在接收时先去除连字符再验证:

[RegularExpression(@"^\d{10}$", ErrorMessage = "手机号必须为10位纯数字")]
public string PhoneNumber { get; set; }

// 接收前端数据时处理:
// phoneNumberInstance.PhoneNumber = submittedValue.Replace("-", "");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:36:03