Как проверить, есть ли в содержимом строки HTML-код?
Как я могу проверить, содержит ли содержимое строки PHP какое-либо содержимое HTML?
Я плохо разбираюсь в регулярных выражениях, поэтому мне нужна функция с именем » is_html «, чтобы это проверить. 🙂 Спасибо!
Что должна возвращать функция is_html() для следующих строк: (1) «I think that 12<20." (2) "#*D<#(@>» (3) «this=that» (4) «hellobob»20.">
6 ответов
Если вы хотите проверить, содержит ли строка «» (это лениво, но может сработать для вас), вы можете попробовать что-то вроде этого:
function is_html($string) < return preg_match("/<[^<]+>/",$string,$m) != 0; >
Вы знаете, как представить именно это выражение без регулярного выражения? Я использую одно и то же выражение, и мне интересно узнать разницу между регулярным выражением и нерегулярным выражением.
— не совсем. Возьмем, к примеру, I
Вместо использования регулярного выражения (как и другие предложения здесь) я использую следующий метод:
function isHtml($string) < if ( $string != strip_tags($string) ) < return true; // Contains HTML >return false; // Does not contain HTML >
Здесь я использую функцию PHP strip_tags для удаления любого HTML из строки. Затем он сравнивает строки и, если они не соответствуют, присутствовали теги HTML.
Хороший вопрос @Red. Я удалил strlen из кода, хоть он и минимален, но сохраняет другой процесс. Спасибо за конструктивный отзыв.
Я проверяю, возвращает ли метод true . При необходимости можно легко поставить else. Хотя я обновил его.
strip_tags в большинстве случаев слишком агрессивен. Строка the value is
Вероятно, самым простым способом было бы что-то вроде:
$str1 = 'something with html in.'; $str2 = 'a string.'; var_dump( hasTags( $str1 ) ); // true - has tags. var_dump( hasTags( $str2 ) ); // false - no tags.
Это вызывает ложные флаги. Возьмем, к примеру, строку I
function isHtml($string)< preg_match("/\s]+))?)+\s*|\s*)\/?>/",$string, $matches); if(count($matches)==0)< return FALSE; >else < return TRUE; >>
Вы просто передаете строку и проверяете, возвращает ли она истину или ложь. Так просто.
Это зависит от того, что вы определяете как HTML-содержимое.
Самый простой способ — проверить, содержит ли строка тег html, что можно сделать с помощью регулярного выражения
if (preg_match('//', $subject)) < # Successful match >else
Если вы хотите убедиться, что у вас есть действующий html, лучше использовать html-анализатор.
В принятом ответе строка, содержащая , будет рассматриваться как HTML, что, очевидно, не так.
Я использую следующее, что может быть, а может и не быть лучшей идеей. (Комментарии приветствуются.)
function isHTML( $str ) < return preg_match( "/\/[a-z]*>/i", $str ) != 0; >
Это ищет любую строку, содержащую/> с нулем или более букв между косой чертой и закрывающей скобкой.
Вышеупомянутая функция возвращает:
is NOT HTML foo is HTML foo is HTML foo is NOT HTML is HTML
Как проверить, есть ли в содержимом строки HTML-код?
Как проверить, содержит ли содержимое строки PHP содержимое HTML? Мне не нравятся регулярные выражения, поэтому я хотел бы иметь функцию с именем » is_html «, чтобы проверить это.:) спасибо!
Что должна is_html() функция is_html() для следующих строк: (1) «I think that 12<20." (2) "#*D<#(@>» (3) «this=that» (4) «hellobob»20.">
Почему вы хотите это знать и насколько серьезной проблемой являются ложные срабатывания в вашем случае использования?
6 ответов
Если вы хотите проверить, содержит ли строка «» (которая ленива, но может работать для вас), вы можете попробовать что-то вроде этого:
function is_html($string) < return preg_match("/<[^<]+>/",$string,$m) != 0; >
Редактирование: вы должны взглянуть на ответ Кевина Трааса чуть ниже. его регулярное выражение, вероятно, вернет меньше ложных срабатываний.
Вы знаете, в любом случае, чтобы представить именно это выражение без регулярных выражений? Я использую то же выражение, и мне любопытно, чем отличается регулярное выражение от не регулярного выражения.
@IanWood — не совсем. Возьмем, к примеру, I
Вместо использования регулярного выражения (как и другие предложения здесь) я использую следующий метод:
function isHtml($string) < if ( $string != strip_tags($string) ) < return true; // Contains HTML >return false; // Does not contain HTML >
Здесь я использую функцию PHP strip_tags, чтобы удалить любой HTML из строки. Затем он сравнивает строки и, если они не соответствуют HTML-тегам, присутствуют.
Хороший вопрос @Red. Я удалил strlen из кода, хотя минимальный это спасает другой процесс. Спасибо за конструктивный отзыв.
@paulo62 paulo62 Я проверяю, возвращает ли метод значение true . Можно легко поставить другое, если требуется. Я обновил его, хотя .
strip_tags слишком агрессивен в большинстве случаев. Строка the value is
Вероятно, самым простым способом было бы что-то вроде:
$str1 = 'something with html in.'; $str2 = 'a string.'; var_dump( hasTags( $str1 ) ); // true - has tags. var_dump( hasTags( $str2 ) ); // false - no tags.
Это вызывает ложные флаги. Возьмем строку, например, I
В принятом ответе будет рассмотрена строка, содержащая как HTML, который, очевидно, это не так.
Я использую следующее, что может быть или не быть лучшей идеей. (Комментарии оценены.)
function isHTML( $str ) < return preg_match( "/\/[a-z]*>/i", $str ) != 0; >
Это ищет любую строку, содержащую /» > с нулевым или большим количеством букв между косой чертой и закрывающей скобкой.
Вышеуказанная функция возвращает:
is NOT HTML foo is HTML foo is HTML foo is NOT HTML is HTML
Как проверить, есть ли в содержимом строки HTML-код?
Как проверить, содержит ли содержимое строки PHP содержимое HTML? Мне не нравятся регулярные выражения, поэтому я хотел бы иметь функцию с именем » is_html «, чтобы проверить это.:) спасибо!
Что должна is_html() функция is_html() для следующих строк: (1) «I think that 12<20." (2) "#*D<#(@>» (3) «this=that» (4) «hellobob»20.">
Почему вы хотите это знать и насколько серьезной проблемой являются ложные срабатывания в вашем случае использования?
6 ответов
Если вы хотите проверить, содержит ли строка «» (которая ленива, но может работать для вас), вы можете попробовать что-то вроде этого:
function is_html($string) < return preg_match("/<[^<]+>/",$string,$m) != 0; >
Редактирование: вы должны взглянуть на ответ Кевина Трааса чуть ниже. его регулярное выражение, вероятно, вернет меньше ложных срабатываний.
Вы знаете, в любом случае, чтобы представить именно это выражение без регулярных выражений? Я использую то же выражение, и мне любопытно, чем отличается регулярное выражение от не регулярного выражения.
@IanWood — не совсем. Возьмем, к примеру, I
Вместо использования регулярного выражения (как и другие предложения здесь) я использую следующий метод:
function isHtml($string) < if ( $string != strip_tags($string) ) < return true; // Contains HTML >return false; // Does not contain HTML >
Здесь я использую функцию PHP strip_tags, чтобы удалить любой HTML из строки. Затем он сравнивает строки и, если они не соответствуют HTML-тегам, присутствуют.
Хороший вопрос @Red. Я удалил strlen из кода, хотя минимальный это спасает другой процесс. Спасибо за конструктивный отзыв.
@paulo62 paulo62 Я проверяю, возвращает ли метод значение true . Можно легко поставить другое, если требуется. Я обновил его, хотя .
strip_tags слишком агрессивен в большинстве случаев. Строка the value is
Вероятно, самым простым способом было бы что-то вроде:
$str1 = 'something with html in.'; $str2 = 'a string.'; var_dump( hasTags( $str1 ) ); // true - has tags. var_dump( hasTags( $str2 ) ); // false - no tags.
Это вызывает ложные флаги. Возьмем строку, например, I
В принятом ответе будет рассмотрена строка, содержащая как HTML, который, очевидно, это не так.
Я использую следующее, что может быть или не быть лучшей идеей. (Комментарии оценены.)
function isHTML( $str ) < return preg_match( "/\/[a-z]*>/i", $str ) != 0; >
Это ищет любую строку, содержащую /» > с нулевым или большим количеством букв между косой чертой и закрывающей скобкой.
Вышеуказанная функция возвращает:
is NOT HTML foo is HTML foo is HTML foo is NOT HTML is HTML
Поиск тегов HTML в строке
У меня есть string и эта строка действительна HTML. Теперь я хочу найти все теги с определенным name и attribute .
Я пробовал это регулярное выражение (т. Е. Div с типом): /()/ .
Do not match me match me not me match me too
Если я использую preg_match, тогда я получаю только
что логично, потому что у другого есть атрибуты в другом порядке.
Какое регулярное выражение мне нужно, чтобы получить следующий array при использовании preg_match в строке примера ?:
array(0 => ' match me', 1 => ' match me too')
Общий совет: не используйте регулярное выражение для анализа HTML. Это будет беспорядочно, если HTML изменится.
DOMDocument этого используйте DOMDocument :
$str = Do not match me