求助: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
相关产品推荐
相关产品推荐

