使用Regex处理手机号码 替换开头0/00并清理非数字字符问题
手机号格式化实现方案
两种实现方式都可以满足需求,可根据团队习惯和后续规则迭代预期选择:
方案1:纯正则实现
通过正则捕获组区分开头的00和单0场景,直接替换前缀,再清理非合规字符:
let phones = ['321-1234567','+355 321 1234567','0103 1234500', '00 355 3211234567' ] phones.forEach(phone => { phone = phone.replace(/^(00|0)/, match => match === '00' ? '+' : '+355') .replace(/[^+\d]/g, '') console.log(phone) })
方案2:startsWith条件判断实现
逻辑更直观,后续调整前缀规则时修改成本更低:
let phones = ['321-1234567','+355 321 1234567','0103 1234500', '00 355 3211234567' ] phones.forEach(phone => { // 先移除所有非数字、非+的分隔字符 let cleanPhone = phone.replace(/[^+\d]/g, '') // 按前缀规则处理 if (cleanPhone.startsWith('00')) { cleanPhone = '+' + cleanPhone.slice(2) } else if (cleanPhone.startsWith('0')) { cleanPhone = '+355' + cleanPhone.slice(1) } console.log(cleanPhone) })
方案对比
- 正则方案:代码更简洁,适合规则固定、不需要频繁调整的场景
- 条件判断方案:可读性更高,后续如果需要新增其他前缀处理规则,修改难度更低,更适合业务复杂的场景
内容的提问来源于stack exchange,提问作者Ani
相关产品推荐
相关产品推荐

