JavaScript:检测并替换粘贴文本中的不可见字符(0x03)
关于不可见字符<0x03>的解析与JS处理方案
1. 字符身份
<0x03>是ASCII控制字符里的文本结束符(ETX, End of Text),属于非打印字符。这类字符本身没有可视化形态,普通textarea会将其视为空白或直接忽略,所以你在textarea里看不到异常,但专业文本编辑器(如Sublime Text)会显示其原始编码标记。
2. 常见来源
- 从终端输出、老旧系统或专业文本工具复制内容时,这类工具可能用ETX标记文本块结束;
- 富文本(如Word、网页富文本)转纯文本过程中,格式标记被错误解析为控制字符;
- 爬虫抓取或自动化生成的文本中,混入了底层数据的控制代码。
3. JavaScript检测与替换方案
检测是否存在ETX字符
用正则匹配ASCII编码的ETX字符:
const hasETX = /\x03/.test(yourInputText);
批量替换为普通空格
全局替换所有ETX字符为标准空格(U+0020):
const cleanedText = yourInputText.replace(/\x03/g, ' ');
实时处理textarea粘贴事件
如果要在用户粘贴时自动清理,可监听paste事件:
const textarea = document.querySelector('textarea'); textarea.addEventListener('paste', (e) => { e.preventDefault(); const pastedText = e.clipboardData.getData('text'); const cleaned = pastedText.replace(/\x03/g, ' '); // 插入到光标位置并调整光标 const start = textarea.selectionStart; const end = textarea.selectionEnd; textarea.value = `${textarea.value.slice(0, start)}${cleaned}${textarea.value.slice(end)}`; textarea.selectionStart = textarea.selectionEnd = start + cleaned.length; });
内容的提问来源于stack exchange,提问作者superfive33
相关产品推荐
相关产品推荐

