使用JavaScript检测粘贴文本格式:识别ChatGPT来源文本
检测粘贴文本格式样式的解决方案
当监听粘贴事件时,仅获取纯文本无法拿到样式信息,你需要通过clipboardData对象访问剪贴板的富文本内容,以下是具体实现方案:
核心思路
通过粘贴事件的clipboardData获取HTML格式的剪贴板内容,分析其中的样式特征(比如ChatGPT粘贴文本常带的特定字体、行高、HTML结构等),再决定是否允许粘贴或处理文本。
具体实现代码
document.addEventListener('paste', function(e) { // 阻止默认粘贴行为,避免文本直接插入输入框 e.preventDefault(); // 获取剪贴板中的HTML富文本内容 const htmlContent = e.clipboardData.getData('text/html'); if (!htmlContent) { // 无富文本内容时处理纯文本 const plainText = e.clipboardData.getData('text/plain'); insertTextToInput(plainText); return; } // 检测HTML内容中是否包含ChatGPT粘贴的特征样式 const isChatGPTContent = detectChatGPTFormat(htmlContent); if (isChatGPTContent) { // 触发拦截逻辑,可替换为提示或自定义处理 alert('检测到疑似AI生成的粘贴内容,请手动输入或调整格式后重试'); } else { // 允许粘贴,这里选择插入纯文本,也可保留格式插入HTML const plainText = e.clipboardData.getData('text/plain'); insertTextToInput(plainText); } }); // 自定义检测函数,识别ChatGPT粘贴的格式特征 function detectChatGPTFormat(html) { // 可根据实际测试的ChatGPT粘贴HTML结构调整规则 const featurePatterns = [ /line-height:\s*1\.5/, /font-family:\s*"Segoe UI",\s*Roboto/, /<div[^>]*style=".*"/, /<p[^>]*class=".*"/ ]; return featurePatterns.some(pattern => pattern.test(html)); } // 将文本插入目标输入框的工具函数 function insertTextToInput(text) { const input = document.getElementById('target-input'); if (!input) return; // 处理光标位置,实现精准插入 const startPos = input.selectionStart; const endPos = input.selectionEnd; input.value = input.value.substring(0, startPos) + text + input.value.substring(endPos); input.selectionStart = input.selectionEnd = startPos + text.length; }
关键说明
clipboardData.getData('text/html'):这是获取样式信息的核心,能拿到剪贴板内容的完整HTML结构及内联样式。- 样式特征需实测调整:不同环境下ChatGPT粘贴的HTML结构可能有差异,建议实际复制ChatGPT文本后查看其HTML源码,提取稳定的特征规则。
- 可结合多层检测:保留语言结构检测作为补充,和样式检测形成双重验证,提升检测准确率。
内容的提问来源于stack exchange,提问作者Haim
相关产品推荐
相关产品推荐

