10 ejemplos de expresiones regulares en PHP comunes

Como seguramente muchos ya sabréis las expresiones regulares nos permiten definir patrones que después podremos usar para detectar si se cumplen determinadas características a un cadena de texto, son muy utilizadas realizar todo tipo de filtros como puede ser detectar si un email está correctamente escrito, comprobar si una dirección IP está bien escrita …

Anteriormente usaba ereg para detectar las expresiones regulares pero estas funciones han quedado obsoletas a partir de PHP 5.3.0 por lo que los ejemplos que os pongo a continuación uso las funciones preg_match.

A continuación pongo 10 ejemplos de funciones útiles a las que podremos llamar introduciendo la cadena de texto correspondiente, usaré nombres para las funciones fácilmente identificables para que sepáis concretamente que es lo que realiza cada una:

Expresiones regulares PHP

Validar que es un nombre de usuario

function validarUsuario($nombre)
{
    return preg_match("#^ [a-z]  [\da-z_] {6,22} [a-z\d] \$#i", $nombre);
}

Expresión regular para validar que un email está escrito correctamente

Hay que destacar que no comprueba si existe o no si no simplemente si usa el formato estándar.

function validarEmail($email)
{
    return preg_match("#^(((( [a-z\d]  [\.\-\+_] ?)*) [a-z0-9] )+)\@(((( [a-z\d]  [\.\-_] ?){0,62}) [a-z\d] )+)\.( [a-z\d] {2,6})$#i", $email);
}

Expresión regular para validar una fecha

Valida una fecha con el formato 00/00/0000

function validarFecha($fecha)
{
    return preg_match('/^\d{1,2}\/\d{1,2}\/\d{4}$/', $fecha);
}

Expresión regular para validar un teléfono de España

Validar un teléfono de España con los 9 dígitos

function validarTelefono($telefono)
{
    return preg_match('/^[9|8|6|7][0-9]{8}$/', $telefono);
}

Expresión regular para validar una dirección IP

Si la dirección IP es IPv4:

function validarIP($ip)
{
    return preg_match('^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$',$ip);
}

Si la dirección IP es IPv6:

function validarIP($ip)
{
    return preg_match("/^\s*((([0-9A-Fa-f]{1,4}:){7}(([0-9A-Fa-f]{1,4})|:))|(([0-9A-Fa-f]{1,4}:){6}(:|((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})|(:[0-9A-Fa-f]{1,4})))|(([0-9A-Fa-f]{1,4}:){5}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){4}(:[0-9A-Fa-f]{1,4}){0,1}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){3}(:[0-9A-Fa-f]{1,4}){0,2}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){2}(:[0-9A-Fa-f]{1,4}){0,3}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:)(:[0-9A-Fa-f]{1,4}){0,4}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(:(:[0-9A-Fa-f]{1,4}){0,5}((:((25[0-5]|2[0-4]\d|
[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})))(%.+)?\s*$/",$ip);
}

Expresión regular para validar una URL

Con esta función no solo podemos validar que la URL esté correctamente escrita si no que también lo convertiremos en un enlace HTML

function validaryPonerEnlaceaURL($url)
{
    $host = "( [a-z\d]  [-a-z\d] * [a-z\d] \.)+ [a-z]  [-a-z\d] * [a-z] ";
    $port = "(:\d{1,})?";
    $path = "(\/ [^?<>\#\"\s] +)?";
    $query = "(\? [^<>\#\"\s] +)?";
 
    $reg = "#((ht|f)tps?:\/\/{$host}{$port}{$path}{$query})#i";
    return preg_replace($reg, "<a href='$1'>$1</a>", $url);
}

$reg = "#((ht|f)tps?:\/\/{$host}{$port}{$path}{$query})#i";
return preg_replace($reg, "<a href=’$1′>$1</a>", $url);
}

Expresión regular con la que podemos controlar los insultos

Realmente muy útil si tienes comentarios y quieres controlar lo que publican tus usuarios, podrás ir añadiendo en la lista del array $insultos[] todas las palabras que quieras substituir por ***

function detectarInsultos($string){
 
    function prep_regexp_array(&$item){
        $item = "#$item#i";
    }
 
    function stars($matches){
        return substr($matches [0] , 0, 1).str_repeat("*", strlen($matches [0] )-1);
    }    
 
    $insultos= array("insulto1", "insulto2");
    array_walk($insultos, "prep_regexp_array");
    return preg_replace_callback($insultos, "***", $string);
}

function prep_regexp_array(&$item){
$item = "#$item#i";
}

function stars($matches){
return substr($matches [0] , 0, 1).str_repeat("*", strlen($matches [0] )-1);
}

$insultos= array("insulto1", "insulto2");
array_walk($insultos, "prep_regexp_array");
return preg_replace_callback($insultos, "***", $string);
}

Expresión regular para proteger los formularios

Podrás controlar si alguien escribe código en el formulario pudiendo impedir que se guarde.

function detectarJavascripts($source, $tags = null)
{
    function clean($matched)
    {
          $attribs =
          "javascript:|onclick|ondblclick|onmousedown|onmouseup|onmouseover|".
          "onmousemove|onmouseout|onkeypress|onkeydown|onkeyup|".
          "onload|class|id|src|style";
 
          $quot = "\"|\'|\`";
          $stripAttrib = "' ($attribs)\s*=\s*($quot)(.*?)(\\2)'i";
          $clean = stripslashes($matched [0] );
          $clean = preg_replace($stripAttrib, '', $clean);
          return $clean;
    }      
 
    $allowedTags='<a><br><b><i><br><li><ol><p><strong><u><ul>';
    $clean = strip_tags($source, $allowedTags);
    $clean = preg_replace_callback('#<(.*?)>#', "clean", $source);
    return $source;
}

$quot = "\"|\’|\`";
$stripAttrib = "’ ($attribs)\s*=\s*($quot)(.*?)(\\2)’i";
$clean = stripslashes($matched [0] );
$clean = preg_replace($stripAttrib, », $clean);
return $clean;
}

$allowedTags='<a><br><b><i><br><li><ol><p><strong><u><ul>’;
$clean = strip_tags($source, $allowedTags);
$clean = preg_replace_callback(‘#<(.*?)>#’, "clean", $source);
return $source;
}

Expresión regular cortar cadenas sin cortar palabras a medias

function cortarCadena_sincortarpañabras($cadena){
    $expresionregular = "/(^.{0,10})(\W+.*$)/";   
    $reemplazo = "\${1}";  
    return preg_replace($expresionregular, $reemplazo, $cadena);
}

Utilidades con preg_split para convertir las fechas de MySQL

Funcion que Convierte fecha de mysql a normal

function cambiar_fecha_mysql_normal($fecha)
{
    $cad = preg_split(/ /,$fecha);
    $sub_cad = preg_split(/-/,$cad[0]);
    $fecha_formateada = $sub_cad[2]./.$sub_cad[1]./.$sub_cad[0].” “.$cad[1];
    return $fecha_formateada;
}

Funcion que Convierte fecha de normal a mysql

function cambiar_fecha_normal_mysql($fecha)
{
    $cad = preg_split(/ /,$fecha);
    $sub_cad = preg_split(/-/,$cad[0]);
    $cad_hora = preg_split(/:/,$cad[1]);
    $hora_formateada = $cad[0].:.$cad_hora[1].:.$cad_hora[2];
    $fecha_formateada = $sub_cad[2].-.$sub_cad[1].-.$sub_cad[0].” “.$hora_formateada;
    return $fecha_formateada;
}

Cualquier error que detectéis no dudéis en comentarlo o si conocéis algún ejemplo que pueda ser de utilidad compartirlo para que el resto podamos hacer uso de el.

Puedes hacer para continuar leyendo o ¡Puedes dejar un comentario en respuesta al artículo aquí!


Tutoriales y ejemplos de jQuery.
Tutoriales y ejemplos de jQuery.
Hojas de trucos (Cheat Sheets) para diseñadores y desarrolladores web.
Hojas de trucos (Cheat Sheets) para diseñadores y desarroll...
CamanJS, javascript jQuery para editar imágenes con canvas en HTML5
CamanJS, javascript jQuery para editar imágenes con canvas ...


Artículos relacionados

Sexy Forms – Dale estilo a tus formularios.
Sexy Forms – Dale estilo a tus formularios.
Eliminar virus de con mensaje falso de la ‘Policía Nacional’ (Ransomware)
Eliminar virus de con mensaje falso de la ‘Policía Na...
jCanvas, plugin de jQuery para interactuar con Canvas
jCanvas, plugin de jQuery para interactuar con Canvas
Páginas para conocer el origen y significado de los apellidos
Páginas para conocer el origen y significado de los apellid...