0

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

我认为被质疑的不是那么清楚,可能这应该更清楚。

我希望'<' and '>'字符串中不允许包含任何特殊字符,例如;,# ...etc。我不在乎是否有类似"<html>" or "<body> "etc 的标签“我只想返回 false,以便用户根本无法输入任何标签,我也想阻止所有的 javascript 所以我假设如果我不允许<,>脚本标签不会通过并且 js 代码不会通过?

所以正则表达式应该不允许包含任何 <, > 和其他特殊字符,;#@$%& etc这样除了标签之外的其他 html 代码也被阻止......例如&nbsp;

4

4 回答 4

1
^[^<>;#]*$

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

于 2012-04-08T09:54:47.030 回答
1

要验证 HTML 元素或字符串是否包含 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

于 2012-04-08T09:12:41.987 回答
0

不要为此使用正则表达式。

您不能使用textContentorinnerText因为至少前者返回script元素的主体。

如果我只支持较新的浏览器并且可以访问(或填充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 '';
    }, '');

}

js小提琴

于 2012-04-08T08:53:44.710 回答
0

Regex.Replace(html, @"] >[\s\S] ?|<[^>]+>", "", RegexOptions.IgnoreCase).Trim();

这里 html 是一个字符串,其中包含需要从中删除 html 和 script 标签的页面的 html

于 2014-01-30T14:36:16.090 回答