0

名前の付いたすべてのhtmlタグ、スクリプトタグ、スクリプトタグ内のすべてのコンテンツ(基本的にはすべてのjavascriptコード)、および文字列にhtmlまたはjavascriptコードが含まれていないなどのhtmlコードを削除する正規表現を開発しようとしています。パス。アップデート:

質問はそれほど明確ではなかったと思いますが、これはもっと明確なはずです。

'<' and '>'などの特殊文字と一緒に文字列で許可されないようにしたい;,# ...。などのようなタグがあるかどうかは気"<html>" or "<body> "にしない」ユーザーがタグをまったく入力できないように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

そのために正規表現を使用しないでください。

使用できないtextContentinnerText、少なくとも前者は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 '';
    }, '');

}

jsFiddle

于 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 に答える