正则表达式从字符串中删除包含内容和html代码的所有标记

时间:2012-04-08 08:46:35

标签: javascript html regex

我正在寻找开发一个正则表达式,删除所有html标签的名称,脚本标签,脚​​本标签中的所有内容(基本上所有的javascript代码),以及任何HTML代码 喜欢等等,字符串中没有html或javascript代码应该通过。 更新:

我认为质疑不太清楚可能会更清楚。

我希望字符串中不允许使用'<' and '>'以及;,# ...等任何特殊字符。我不关心是否有"<html>" or "<body> "等标记“我只是想要返回false以便用户根本无法输入任何标记,我也想阻止所有的javascript,所以我假设我不允许<,>脚本标记不通过而js代码不会通过?

所以正则表达式应该不允许包含任何&lt;,&gt;以及;#@$%& etc之类的其他特殊字符,以便除了标记之外的其他HTML代码也被阻止...例如&nbsp;

4 个答案:

答案 0 :(得分:1)

要验证HTML元素或String是否包含HTML标记,请检查以下JavaScript函数:

function containsHTMLTags(str)
{
        if(str.match(/([\<])([^\>]{1,})*([\>])/i)==null)
         return false;
        else
         return true;
}

该功能使用黑名单过滤。

参考文献:http://www.hscripts.com/scripts/JavaScript/html-tag-validation.php

答案 1 :(得分:1)

^[^<>;#]*$

如果字符串匹配该正则表达式,则它不包含括号中的字符。我希望我能理解你的问题。

答案 2 :(得分:0)

不要使用正则表达式。

您无法使用textContentinnerText,因为至少前者会返回script元素的正文。

如果我只支持较新的浏览器并且可以访问(或 shimmed Array.prototype.indexOf()Array.prototype.reduce()Array.prototype.map(),则可以使用以下内容。 ..

var getText = function me(node, excludeElements) {

    if (!excludeElements instanceof Array) {
        excludeElements = [];
    } else {
        excludeElements.map(function(element) {
            return element.toLowerCase();
        });
    }

    return [].slice.call(node.childNodes).reduce(function(str, node) {
        var nodeType = node.nodeType;
        switch (nodeType) {
        case 3:
            return str + node.data;
        case 1:
            if (excludeElements.indexOf(node.tagName.toLowerCase()) == -1) {
                return str + me(node, excludeElements);
            }
        }
        return '';
    }, '');

}

jsFiddle

答案 3 :(得分:0)

Regex.Replace(html,@“] &gt; [\ s \ S] ?|&lt; [^&gt;] +&gt;”,“”,RegexOptions.IgnoreCase).Trim ();

这里的html是一个字符串,其中包含一个页面的html,需要删除html和脚本标记