美国电话号码自动格式化问题:输入前缀1时+1重复显示
问题分析
你的代码核心问题是无条件在开头添加+1 ,同时直接使用用户输入的全部数字(包括开头的1)拼接后续内容,导致输入以1开头时,出现+1 1XXX...的重复问题。
解决方案
修改逻辑:先判断输入数字是否以1开头,若存在则剔除这个开头的1(因为我们已经手动添加了国家码+1),再按格式拼接内容。
修改后的代码:
function numberReg(event) { let input = event.target.value.replace(/[^0-9]/g, ""); // 剔除开头的1,避免和手动添加的+1重复 if (input.startsWith('1')) { input = input.slice(1); } let NumValue = ""; if (input.length >= 1) { NumValue += "+1 "; if (input.length >= 3) { NumValue += "(" + input.substring(0, 3) + ") "; if (input.length >= 6) { NumValue += input.substring(3, 6) + " -" + input.substring(6, 10); } else { NumValue += input.substring(3, 6); } } else { NumValue += input.substring(0, 3); } } event.target.value = NumValue; }
关键调整说明
- 新增
input.startsWith('1')判断,自动剔除用户输入的开头1,避免与手动添加的+1重复; - 调整长度判断阈值:原代码的
>=4/>=7是基于包含国家码1的输入,现在输入已去掉开头1,因此改为>=3/>=6,对应美国号码的3位区号、3位中心局代码的格式逻辑。
测试效果示例:
- 输入
14567853424→ 输出+1 (456) 785 -3424 - 输入
4567853424→ 输出+1 (456) 785 -3424 - 输入
1456→ 输出+1 (456)
内容的提问来源于stack exchange,提问作者Hassanali444
相关产品推荐
相关产品推荐

