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

求助:JS实现手机号掩码后按规则添加连字符的正确方法

手机号格式化代码修正方案

你的代码问题出在第二个正则表达式/.{3}(?!$)/g,它会对每3个连续字符(除了字符串末尾)都添加横线,导致最后四位被拆成456-7,不符合需求。以下是两种修正方案:

方案一:分步处理

先将手机号前6位替换为x,再通过分组匹配添加指定位置的横线:

var phone = "9871234567";
// 替换前6位数字为x
var maskedPhone = phone.replace(/^\d{6}/, 'xxxxxx');
// 按格式拆分并添加横线
var result = maskedPhone.replace(/^(.{3})(.{3})(.*)$/, '$1-$2-$3');
console.log(result); // 输出 xxx-xxx-4567

方案二:单次正则替换完成

直接通过正则分组匹配手机号的三段结构,一次性完成替换:

var phone = "9871234567";
var result = phone.replace(/^(\d{3})(\d{3})(\d{4})$/, 'xxx-xxx-$3');
console.log(result); // 输出 xxx-xxx-4567

兼容带符号的手机号

如果原始手机号包含非数字字符(如-、空格),可以先清理为纯数字再处理:

var phone = "987-123 4567";
// 去除所有非数字字符
var cleanPhone = phone.replace(/\D/g, '');
var result = cleanPhone.replace(/^(\d{3})(\d{3})(\d{4})$/, 'xxx-xxx-$3');
console.log(result); // 输出 xxx-xxx-4567

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:03:32