【问题标题】:Allow only a subset of HTML tags in ASP.Net textarea在 ASP.Net textarea 中只允许 HTML 标记的子集
【发布时间】:2013-09-26 12:24:03
【问题描述】:

我需要在我的文本区域中允许某些 HTML 标签并忽略所有其他标签。 例如 将被允许,但如果 在那里,我希望将标签替换为其内部文本。

一些文本将是:一些文本

一些文本

将是:一些文本

我还希望从所有允许的标签中提取所有属性。

这在正则表达式中可行吗?

更新:我尝试了这种否定的前瞻<(?!b|br|p|i|u|sup|sub|br|ul|ol|li|a).*(\s[^>]*)?>,但它与整个文档匹配。如果有人能解决这种消极的前瞻性,那就太好了。

【问题讨论】:

  • html 不是用正则表达式解析的..使用 html 解析器..也让你的问题具体化。现在你问了很多,我们必须关闭这个 ans 除非你编辑它并使它更具体
  • 几乎不能称为“解析”。无需配对。我只需要检测单个标签。
  • 你将如何解析(原谅)检测:<h1><b>some text</b></h1>
  • 好吧,就我而言,找到并删除所有

    打开标签以及所有

    关闭标签就足够了。由于我不需要将打开标签与关闭标签配对,我虽然正则表达式适合。我想要一个匹配 的正则表达式。这就是我所需要的!
  • 我尝试了这个否定的前瞻 ] *)?> 但它匹配整个文档。

标签: html asp.net regex editor


【解决方案1】:

我找到了解决办法。

如果其他人将来需要这个,这就是我所做的。

        // remove HTML comments
        Regex regex = new Regex(@"<!--[^-]*-->", RegexOptions.IgnoreCase);
        input = regex.Replace(input, "");
        // remove unsupported tags
        regex = new Regex(@"</?((?!p|i|u|sup|sub|br|ol|li|a|b|/)|((p|i|sup|sub|br|ul|ol|li|a|b)[^<>\s]+))[^<>]*?>", RegexOptions.IgnoreCase);
        input = regex.Replace(input, "");
        // remove attribiutes
        regex = new Regex(@"(<[^\s]+)(\s[^<>]*)(>)", RegexOptions.IgnoreCase);
        input = regex.Replace(input, m => m.Groups[1].Value + m.Groups[3].Value);
        return input;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    相关资源
    最近更新 更多