Linwind

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);
}

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);
}

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;
}

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.

Publicado el 13 de noviembre, 2011

Tutoriales y ejemplos de jQuery.
Publicado el 02 Jul 2009

Hojas de trucos (Cheat Sheets) para diseñadores y desarrolladores web.
Publicado el 18 Abr 2009

CamanJS, javascript jQuery para editar imágenes con canvas en HTML5
Publicado el 25 Feb 2014

Sexy Forms – Dale estilo a tus formularios.
Publicado el 01 Oct 2009

2 Comentarios

  1. ulysess dice:

    Muy interesante. Gracias.

  2. Victor dice:

    La de email no funciona siempre manda 0.

Dejar un comentario


Actualidad Windows Linux Juegos Redes Sociales Utilidades Telefonía Movil Micropost