jQuery正则实现输入框自动空格:前两位后加空格,后续每三位加空格
输入框格式化:前两位后加空格,后续每三位加空格
你的代码问题出在逻辑覆盖和规则匹配上:当输入长度超过5时,会直接把所有字符按3个一组拆分,完全忽略了「前两位单独分隔」的核心规则;同时像长度为5(2+3)这种边界情况也没处理到。
下面是修复后的代码,同时改用input事件(比keyup更适配粘贴、右键输入等场景):
$('#form-field-indentification_number').on('input', function() { // 先移除所有已存在的空格,避免重复格式化 let rawValue = $(this).val().replace(/\s/g, ''); // 应用格式规则:前两位后加空格,后续每三位加空格 let formattedValue = rawValue // 给前两位数字后加空格(仅当后面还有数字时) .replace(/^(\d{2})(?=\d)/, '$1 ') // 给后面每三位数字后加空格(仅当后面还有数字时) .replace(/(\d{3})(?=\d)/g, '$1 '); $(this).val(formattedValue); })
代码说明:
replace(/\s/g, ''):清空所有空格,确保每次格式化都是基于纯原始内容- 第一个正则
/^(\d{2})(?=\d)/:匹配开头的两位数字,且后面还有数字时,在两位后插入空格 - 第二个正则
/(\d{3})(?=\d)/g:全局匹配每三位数字,且后面还有数字时,在三位后插入空格 - 用
input事件替代keyup:能覆盖手动输入、粘贴、拖拽输入等更多场景,避免格式化遗漏
如果需要限制输入仅为数字,可以在处理前再加一步过滤:
rawValue = rawValue.replace(/\D/g, ''); // 移除所有非数字字符
内容的提问来源于stack exchange,提问作者Vladimir Kyatipov
相关产品推荐
相关产品推荐

