
本文介绍如何通过一行正则表达式(/D/g)高效清除电话号码字符串中的所有非数字字符,包括空格、括号、加号、连字符等,仅保留数字,适用于各类国际或本地格式化号码的标准化处理。
本文介绍如何通过一行正则表达式(`/d/g`)高效清除电话号码字符串中的所有非数字字符,包括空格、括号、加号、连字符等,仅保留数字,适用于各类国际或本地格式化号码的标准化处理。
在实际开发中,用户输入的电话号码常包含大量格式化符号——如 +1-555-555-1234、1(800)555-0199 或 555 555 1234。为统一存储、验证或调用,需将其标准化为纯数字字符串。JavaScript 提供了简洁高效的解决方案:使用正则表达式 /\D/g 配合 String.prototype.replace() 方法。
/D/g 的含义是:
- D 表示「非数字字符」(等价于 [^0-9]);
- g 标志表示全局匹配(替换所有而非仅第一个);
- replace(/D/g, '') 即将所有非数字字符替换为空字符串。
✅ 示例代码如下:
function normalizePhoneNumber(phone) {
return phone.replace(/D/g, '');
}
// 测试用例
console.log(normalizePhoneNumber("+1-555-555-1234")); // "15555551234"
console.log(normalizePhoneNumber("1(800)555-0199")); // "18005550199"
console.log(normalizePhoneNumber("555 555 1234")); // "5555551234"
console.log(normalizePhoneNumber("9898871234567)")); // "9898871234567"
console.log(normalizePhoneNumber("(22) 222-222")); // "22222222"
⚠️ 注意事项:
- 该方法会无差别移除非数字字符,因此不适用于需保留国家代码前缀 + 的场景(如国际号码校验)。若需保留 + 仅用于首字符,可改用更精确的正则(如 ^\+|\D/g 并分步处理),但绝大多数表单提交、数据库存储及后端校验场景只需纯数字。
- 空字符串或全非数字输入(如 "---")将返回空字符串 "",建议在业务逻辑中补充长度校验(如 result.length >= 10)。
- 此方案兼容所有现代浏览器及 Node.js 环境,无需额外依赖,性能优异。
总结:phone.replace(/D/g, '') 是处理电话号码去格式化的黄金标准——简短、可靠、可读性强。掌握这一模式,可快速适配各类输入清洗需求,大幅提升表单健壮性与数据一致性。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











