RegEx:HTML白名单

时间:2009-02-05 04:48:30

标签: regex

在正则表达式上表现不佳,我一直在与他们合作改进。我一直试图做的一个概念是删除除允许列表之外的所有HTML元素。

我设法反过来 - 删除指定的元素列表:

<\/?(strong|em|a)[^>]*>

但是我想要反其道而行,除去每个元素。

4 个答案:

答案 0 :(得分:5)

不要使用正则表达式来解析[X] HTML。

尤其绝对不要使用正则表达式来解析[X] HTML作为安全措施。

HTML解析器(或整数后跟XML解析器)是唯一可行的白名单方法。

  

/&lt;(。| \ n)*?&gt; / g匹配所有HTML标记对,包括标记中的属性

没有

<a href=">" onmouseover="attackCode()">

以及其他一千种可能性,无论是有效还是格式错误,但浏览器仍然可以理解它。

答案 1 :(得分:4)

答案 2 :(得分:0)

假设PCRE,使用(?!元素)而不是(元素)。

答案 3 :(得分:0)

/<(.|\n)*?>/g

matches all HTML tags pairs including attributes in the tags

排除标签strong和em

(?!strong|em)

匹配所有HTML标记对但强和em

<((?!strong|em).|\n)*?>