我想確認如果輸入的代碼是HTML代碼(有必要先從<html>
與</html>
結束)正則表達式的HTML標記的JavaScript
我嘗試這樣做
var reghtml = new RegExp("(<html>*\n+</html>)");
但是我有一個問題是需要使\ n的代碼,我需要驗證所述第一和結束標記(= <html>
和</html>
)如果他在他們之間做了一些事情,則需要以<
開頭並以>
結尾
有沒有解決方法?
我想確認如果輸入的代碼是HTML代碼(有必要先從<html>
與</html>
結束)正則表達式的HTML標記的JavaScript
我嘗試這樣做
var reghtml = new RegExp("(<html>*\n+</html>)");
但是我有一個問題是需要使\ n的代碼,我需要驗證所述第一和結束標記(= <html>
和</html>
)如果他在他們之間做了一些事情,則需要以<
開頭並以>
結尾
有沒有解決方法?
這裏給你一個模式。它會檢查第一級是否有有效的開始和結束標記。第一個級別必須有結束標記,您不能執行<html><img /></html>
,因爲您可以刪除整個結束標記檢查模式部分。
var validHtml = '\
<html itemscope>\
\t <head></head>\
\t <body style="background: red;">\
\t \t Everything is fine\
\t </body>\
</html>\
',
\t invalidHtml = '\
<html itemscope>\
\t <head></foot>\
\t <body>\
\t \t Nothing is fine\
\t </body>\
</html>\
',
\t pattern = /^\s*<html(?:\s[^>]*)?>(?:\s*<(\w+)(?:\s[^>]+)?>(?:.|\s)*<\/\1>\s*)*<\/html>\s*$/i;
\t
console.log(pattern.test(validHtml) ? 'valid' : 'invalid');
console.log(pattern.test(invalidHtml) ? 'valid' : 'invalid');
你不應該使用正則表達式來驗證HTML(更不用說解析它),因爲HTML是不是 「Regular Language」。
所以這裏的,這將導致任何正則表達式假陰性情況的一個例子,你可以寫嘗試驗證HTML標記爲無效:
<html>
<head>
<!-- </html> -->
</head>
<body>
<p>This is valid HTML</p>
</body>
</html>
而且因爲你可以在HTML嵌套評論(和SGML和XML),你不能寫一個簡單的正則表達式這種特殊的情況下,或者:
<html>
<head>
<!-- <!-- <!-- <!-- </html> -->
</head>
<body>
<p>This is valid HTML</p>
</body>
</html>
而且這裏有一個假陽性(假設你沒有使用正則表達式^$
主播):
<p>illegal element</p>
<html>
<img>illegal text node</img>
</html>
<p>another illegal element</p>
當然,還有更強大的正則表達式實現,它們爲計算深度之類的東西增加了rudiminary支持,但是接下來您將處於一個受到傷害的世界。
驗證HTML的正確方法是使用HTML DOM庫。在.NET中,這是HtmlAgilityPack。在基於瀏覽器的JavaScript這是更簡單:只需要使用瀏覽器內置的解析器(innerHTML
):
(從Check if HTML snippet is valid with Javascript被盜)
function isValidHtml(html) {
var doc = document.implementation.createHTMLDocuiment("");
doc.documentElement.innerHTML = html;
return (doc.documentElement.innerHTML === html);
}
對不起,*如果他讓他們之間的事情就必須啓動用'<'結尾,用'>'*結尾是相當不清楚的。 –
@WiktorStribiżew如果他作出這樣''它是正確的,但如果他想使標籤之間的事情,他需要開始用'<'和結束'>',例如'測試'=>錯誤| ''=>正確 –
saadsaad
類似'/^(?:\ s * <[^> *))* <\/html> $ /。test(your_html)'? –