仅允许ASP.Net textarea中的HTML标记子集

时间:2013-09-21 02:08:46

标签: html asp.net regex editor

我需要在textarea中允许某些HTML标记并忽略所有其他标记。 例如< b>将被允许​​,但如果< h1>在那里我希望标签被其内部文本替换。

< b>一些文字< / B个将是:一些文字 和< h1>一些文字< / h1>将是:一些文字

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

正则表达式可以吗?

更新:我尝试了这个否定前瞻<(?!b|br|p|i|u|sup|sub|br|ul|ol|li|a).*(\s[^>]*)?>,但它与整个文档相匹配。如果有人能够解决那个负面的前瞻,那将会很棒。

1 个答案:

答案 0 :(得分:0)

我找到了解决这个问题的方法。

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

        // 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;