2016-11-26 6 views
-1

Я хочу, чтобы проверить, если код, введите это HTML код (необходимо, чтобы начать с <html> и заканчиваться </html>)Регулярное выражение HTML тегов Javascript

Я пытаюсь сделать это

var reghtml = new RegExp("(<html>*\n+</html>)");

, но у меня есть проблема, нужно сделать \ п в коде, мне нужно проверить первый и конечный тег (= <html> и </html>) и если он что-то делает между ними, то необходимо начать с < и заканчиваться >

есть ли решение?

+1

К сожалению, * и если он делает что-то между ними надо начинать с '' 'и заканчивается' '' *, довольно неясно. –

+0

@ WiktorStribiżew, если он делает это так: 'это правильно, но если он хочет что-то сделать между тегом, ему нужно начинать с' <'и заканчивать' '', например ' test' => ошибка | '' => correct – saadsaad

+1

Что-то вроде '/^ (?: \ S * <[^>] *>) * <\/html> $ /. Test (your_html)'? –

ответ

1

Здесь шаблон для вас. Он проверяет, имеет ли первый уровень допустимый тег открытия и закрытия. На первом уровне должны быть закрывающие теги, вы не можете сделать <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');

1

Вы не должны использовать регулярные-выражения для проверки 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> 

Предоставлено, есть более мощные реализации регулярных выражений, которые добавляют рудиментарную поддержку для таких вещей, как подсчет глубины, но тогда вы находитесь в мире обид.

Правильный способ проверки 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); 
} 
Смежные вопросы