You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

表单textarea纯文本校验:如何识别转义后的HTML标签?

解决textarea纯文本校验:识别转义HTML标签的方案

方法一:扩展正则同时匹配未转义/转义标签

直接修改正则,让它同时覆盖原生HTML标签和转义后的实体标签:

const htmlDetectPattern = /(<[^>]+>)|(&lt;[^&gt;]+&gt;)/gi;
  • 规则说明:
    • (<[^>]+>):匹配未转义的原生标签(比如<a href="#">test</a>)
    • (&lt;[^&gt;]+&gt;):匹配转义后的标签(比如&lt;a href="#"&gt;link&lt;/a&gt;)
    • gi修饰符:全局匹配+忽略大小写,确保所有场景都能覆盖

使用示例:

const input = document.querySelector('textarea').value;
if (htmlDetectPattern.test(input)) {
  alert('禁止输入HTML标签(包括转义后的格式)');
  // 这里可以添加阻止提交/清除内容的逻辑
}

方法二:先解码转义实体,再用原正则校验

这种方法更稳妥,先把转义的实体还原成原生标签,再用你原来的正则检测:

// 解码HTML实体的工具函数
function decodeEntities(text) {
  const tempTextarea = document.createElement('textarea');
  tempTextarea.innerHTML = text;
  return tempTextarea.value;
}

// 校验逻辑
const inputText = document.querySelector('textarea').value;
const decodedText = decodeEntities(inputText);
// 用你原来的正则检测解码后的内容
const originalPattern = /<[^>]+>/gi;
if (originalPattern.test(decodedText)) {
  alert('输入包含HTML内容,请仅输入纯文本');
}
  • 原理:利用textarea的innerHTML属性自动解码实体,把&lt;转成<、&gt;转成>,之后就能用原有正则识别所有HTML标签。

方法三:直接过滤/校验纯文本(最彻底)

如果核心需求是只允许纯文本,可直接对比“清理后内容”和原输入:

function sanitizeToPlainText(text) {
  // 先解码实体,再移除所有HTML标签
  const decoded = decodeEntities(text);
  return decoded.replace(/<[^>]+>/g, '').trim();
}

// 校验逻辑
const inputText = document.querySelector('textarea').value;
const cleanedText = sanitizeToPlainText(inputText);
if (cleanedText !== inputText.trim()) {
  alert('输入存在违规HTML内容,请修改后提交');
}

注意:正则校验HTML并非绝对完美(比如极端嵌套、异常格式的标签可能漏检),如果对安全性要求极高,可结合DOM解析做二次校验。

内容的提问来源于stack exchange,提问作者timholz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 09:57:40