php html regex xhtml

php - ¿Cómo verificar si el contenido de la cadena tiene algún HTML?



regex xhtml (6)

En lugar de usar expresiones regulares (como las otras sugerencias aquí), utilizo el siguiente método:

function isHtml($string) { if ( $string != strip_tags($string) ) { return true; // Contains HTML } return false; // Does not contain HTML }

Aquí utilizo una función PHP strip_tags para eliminar cualquier HTML de la cadena. Luego compara las cadenas y si no coinciden, las etiquetas HTML estaban presentes.

¿Cómo puedo verificar si los contenidos de la cadena PHP contienen algún contenido HTML?

No soy bueno con las expresiones regulares, así que me gustaría tener una función llamada " is_html " para verificar esto. :) ¡gracias!


Eso depende de lo que definas como contenido html.

Lo más sencillo es probar si la cadena contiene la etiqueta html que se puede hacer con la expresión regular.

<html.*>

En PHP la prueba será

if (preg_match(''/<html.*>/'', $subject)) { # Successful match } else { # Match attempt failed }

Si desea ver que tiene html válido, es mejor usar un analizador html.


Esto es lo que se me ocurrió

function isHtml($string){ preg_match("/<//?/w+((/s+/w+(/s*=/s*(?:/".*?/"|''.*?''|[^''/">/s]+))?)+/s*|/s*)//?>/",$string, $matches); if(count($matches)==0){ return FALSE; }else{ return TRUE; } }

Simplemente pasa una cadena y verifica si devuelve verdadero o falso. Tan sencillo como eso.


La respuesta aceptada considerará una cadena que contiene <algo> como HTML que, obviamente, no lo es.

Uso lo siguiente, que puede o no ser una mejor idea. (Comentarios apreciados.)

function isHTML( $str ) { return preg_match( "///[a-z]*>/i", $str ) != 0; }

Esto busca cualquier cadena que contenga /> con cero o más letras entre la barra diagonal y el corchete de cierre.

La función anterior devuelve:

<something> is NOT HTML <b>foo</b> is HTML <B>foo</B> is HTML <b>foo<b> is NOT HTML <input /> is HTML


Probablemente la forma más fácil sería algo como:

<?php function hasTags( $str ) { return !(strcmp( $str, strip_tags($str ) ) == 0); } $str1 = ''<p>something with <a href="/some/url">html</a> in.''; $str2 = ''a string.''; var_dump( hasTags( $str1 ) ); // true - has tags. var_dump( hasTags( $str2 ) ); // false - no tags.


Si desea probar si una cadena contiene un "<something>" (que es perezoso pero puede funcionar para usted), puede intentar algo como eso:

function is_html($string) { return preg_match("/<[^<]+>/",$string,$m) != 0; }

Edit: Deberías echarle un vistazo a la respuesta de Kevin Traas justo debajo. Su expresión regular probablemente devolverá menos falsos positivos.