带点号千分分隔最多4位数字的正则实现及优化问题
实现方案
逻辑说明
要满足含千位分隔点总长度最多4位的要求,核心前提是原始纯数字最多保留4位:4位纯数字格式化后最多生成1个千位分隔点,总长度刚好为4(示例1234→1.234),如果纯数字超过4位,格式化后必然超过4位长度。
分步实现代码
你原有的代码只需要新增一步纯数字截断逻辑即可:
// 输入值处理函数 function formatInputValue(value) { // 1. 过滤非数字字符,截取前4位纯数字 const pureDigits = value.replace(/\D/g, '').slice(0, 4); // 2. 新增千位分隔点 return pureDigits.replace(/\B(?=(\d{3})+(?!\d))/g, '.'); }
合并单链写法(更简短)
可以把逻辑合并成单行实现,正则也做了等价简化:
value.replace(/\D/g, '').slice(0,4).replace(/\B(?=(\d{3})+$)/g, '.')
效果验证
- 输入
5100→ 输出5.100,匹配要求示例 - 输入
abc12345→ 输出1.234,总长度4位符合要求 - 输入
123→ 输出123,无多余分隔符 - 输入
12→ 输出12,符合所有规则
内容的提问来源于stack exchange,提问作者Skygazer
相关产品推荐
相关产品推荐

