输入框数字格式化添加千位分隔符时如何保留负号不丢失
问题原因
你原有代码中的首个正则替换规则replace(/\D/g, "")会匹配并清除所有非数字字符,负号-属于非数字字符范畴,因此输入负数时负号会被直接移除。
调整方案
你可以先单独提取开头位置的有效负号,再对纯数字部分做千位分隔处理,最后拼接负号即可,调整后的代码如下:
$(this).val(function(index, value) { // 仅保留开头位置的负号作为符号位 const sign = value.trim().startsWith('-') ? '-' : ''; // 提取所有数字字符 const numPart = value.replace(/\D/g, ''); // 拼接符号位和加了千位分隔的数字部分 return sign + numPart.replace(/\B(?=(\d{3})+(?!\d))/g, ","); });
说明
- 仅会保留输入内容开头的负号,输入在数字中间的负号会被自动清除,避免出现
12-345这类非法格式 - 原有正数的千位分隔逻辑完全不变,不会影响原有正常输入的展示效果
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

