簡體   English   中英

用於從字符串中刪除所有帶有內容和 html 代碼的標簽的正則表達式

[英]regular expression to remove all tags with content and html code from a string

我正在尋找開發一個正則表達式,它刪除所有 html 標簽,其中包含名稱、腳本標簽、腳本標簽中的所有內容(基本上所有 javascript 代碼),以及任何 html 代碼等,只是字符串中沒有 html 或 javascript 代碼應該經過。 更新:

我認為被質疑的不是那么清楚,可能這應該更清楚。

我希望字符串中不允許使用'<' and '>'以及任何特殊字符,例如;,#...等。我不在乎是否有"<html>" or "<body> "類的標簽"<html>" or "<body> "等”我只想返回 false 以便用戶根本無法輸入任何標簽,我還想阻止所有 javascript 所以我假設如果我不允許<,>腳本標簽不會通過並且 js 代碼不會通過?

因此,正則表達式應該不允許包含任何 <、> 和其他特殊字符,如;#@$%& etc ,以便除標簽之外的其他 html 代碼也被阻止...例如&nbsp;

要驗證 HTML 元素或字符串是否包含 HTML 標簽,請檢查以下 JavaScript function:

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

function 使用黑名單過濾。

參考資料: http://www.hscripts.com/scripts/JavaScript/html-tag-validation.php

^[^<>;#]*$

如果字符串與該正則表達式匹配,則它不包含括號中的字符。 我希望我能很好地理解你的問題。

不要為此使用正則表達式。

您不能使用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 '';
    }, '');

}

js小提琴

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

這里 html 是一個字符串,其中包含需要從中刪除 html 和腳本標簽的頁面的 html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM