8 expresiones regulares para PHP muy útiles

En Devolio.com el autor hizo una lista de 8 expresiones regurales que considera útiles a la hora de programar con PHP, muchas de ellas utilizadas para validar nombres de usuario, números telefónicos, direcciones de email entre otras.

Validar un nombre de usuario

Esta regla es para permitir usuarios de 4 hasta 28 caracteres de longitud, alfanuméricos y permitir guiones bajos.

$string = "userNaME4234432_";
if (preg_match(\'/^[a-z\\d_]{4,28}$/i\', $string)) {
    echo "example 1 successful.";
}

Números telefónicos
Esto es para validar números de teléfono (en el formato de Estados Unidos, Canadá y México) el número debe ser de la siguiente manera: (###)###-####

$string = "(032)555-5555";
if (preg_match(\'/^(\\(?[0-9]{3,3}\\)?|[0-9]{3,3}[-. ]?)[ ][0-9]{3,3}[-. ]?[0-9]{4,4}$/\', $string)) {
echo "ejemplo 2 realizado con éxito.";
}

El número de teléfono puede ser escrito así (###) ###-####, o así ###-###-#### y también va a validar.

Direcciones de Email

No hace falta decir más el código es el siguiente.

$string = "first.last@domain.co.uk";
if (preg_match(
\'/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/\',
$string)) {
    echo "ejemplo 3 realizado con éxito.";
}

Códigos postales

Códigos postales de que permite solo números en el siguiente formato xxxxx y xxxxx-xxxx

$string = "55324-4324";
if (preg_match(\'/^[0-9]{5,5}([- ]?[0-9]{4,4})?$/\', $string)) {
    echo "ejemplo 4 realizado con éxito.";
}

Direcciones IP

No necesitamos hacer un PING ni nada por el estilo, sólo verificamos que estén bien escritas, cómo este ejemplo 255.255.255.0.

$string = "255.255.255.0";
if (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}$\',
$string)) {
    echo "ejemplo 5 realizado con éxito.";
}

Colores hexadecimales

Ya que hablamos de números tambien podemos verificar valores hexadecimales de números en sus 2 formas la normal y la abreviada (#333, 333, #333333 o 333333) con el símbolo # opcional.

$string = "#666666";
if (preg_match(\'/^#(?:(?:[a-f\\d]{3}){1,2})$/i\', $string)) {
    echo "ejemplo 6 realizado con éxito.";
}

Buscar comentarios multi-línea

Una forma simple de buscar o eliminar comentarios multilínea en PHP/CSS/Otros lenguajes.

$string = "/* commmmment */";
if (preg_match(\'/^[(/*)+.+(*/)]$/\', $string)) {
    echo "ejemplo 7 realizado con éxito.";
}

Fechas
Uno de los formatos de fechas típicos es el MM/DD/YYYY y su validación es la siguiente.

$string = "10/15/2007";
if (preg_match(\'/^\\d{1,2}\\/\\d{1,2}\\/\\d{4}$/\', $string)) {
    echo "ejemplo 8 realizado con éxito.";
}

¿Conoces alguna otra expresión regular que se útil?

Escríbe un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

38 comentarios en “8 expresiones regulares para PHP muy útiles”

  1. la e.r para validar el mail q se muestra arriba no tiene los filtros necesarios, por lo tanto estos tipos de correos los da como validos:
    yo@web_5.com
    yo@_._.algo
    yo@_._.algo.algo.algo.algo.algo.algo.algo.algo.algo.etc.etc.etc.etc.jaja

    al igual que la de «Buscar comentarios multi-línea»

    y en «Fechas» se filtran: 99/99/9999

  2. Bueno, creo que por fin di con una expr reg. decente para mails ya que en mi sistema daba mucha lata eso hehe, aqui la comparto

    ^[0-9a-zA-Z]+([\._]?[[:alnum:]])*[[:alnum:]]@[0-9a-zA-Z]+([-]?[[:alnum:]])*[.][a-zA-Z]{2,4}$

  3. Hola, muchas gracias por los ejemplos, intento modificar la de los números de teléfono para el formato internacional pero no tengo la certeza de que me funcione para el formato +12.123456789 y +123.123456789, me hice la siguiente función:

    function telefono($numero) {
    if (preg_match(‘/^[+]?[0-9]{2,2}[.]?[0-9]{9,9}$/’, $numero))
    return true;
    return false;}

  4. $regex = «((https?|ftp)\:\/\/)?»; // SCHEME
    $regex .= «([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?»; // User and Pass
    $regex .= «([a-z0-9-.]*)\.([a-z]{2,3})»; // Host or IP
    $regex .= «(\:[0-9]{2,5})?»; // Port
    $regex .= «(\/([a-z0-9+\$_-]\.?)+)*\/?»; // Path
    $regex .= «(\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)?»; // GET Query
    $regex .= «(#[a-z_.-][a-z0-9+\$_.-]*)?»; // Anchor

    if (preg_match(«/^$regex$/», $url))
    return true;
    else
    return false;

  5. excelente aporte, pero yo me encontraba en el caso de formateo de una fecha en php por medio del preg_match, pero hice una funcioncita con preg_split… debajo la comparto….

    /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 = $cad_hora[0]+12;
    $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;
    }

  6. Esta biene sto pero yo quisiera verlo en acción es decir en un formulario
    Por ejemplo ingressas mal el nombre d eusuario y tambien el apellido y te imprimr con un echo los 2 errores.
    Qusiera en un formualrio el ejemplo no simple

  7. Muy bueno sin duda que lo voy a usar, me gusta ademas porque utiliza la funcion «preg_match», hay otra funcion que tambien se utiliza para expresiones regulares(no recuerdo el nombre) que segun PHP ya es obsoleta.

    gracias!!!

  8. Buen aporte gracias pero yo prefiero validar algunos de los datos con funciones nativas de PHP.

    Por ejemplo, para validar un email, hacemos lo siguiente:

    filter_var(«example@example.com», FILTER_VALIDATE_EMAIL);

  9. No recuerdo correctamente si la expresion de rangos numericos abarcaba numeros de 0 al 9 o mas, pero en caso de poder hacer cosas del estilo: 1-31 (del 1 al 31), entonces se podría corregir el ejemplo de la validacion de fechas, ya que el dado no funciona.

    Una fecha del estilo:
    99/99/9999 es considerada como CORRECTA, la cual no es así.
    la validacion de fecha debería ser:
    [1-31]/[1-12]/[1900-3000]
    Algo así… Algo así mejoraría mucho mas la validación. Seguiría imperfecta por los meses de 30 dias…

    pero igualmente, recordar que existe una funcion para validar fechas, la cual es nativa de PHP:
    checkdate(mont, day, year)

    Saludos!

  10. Algunas expresiones hacen mal uso del almacenamiento con el email no tiene caso guardar tantas coincidencias sí sólo se busca una, ya que guardas una por cada llave (expresion) más la última. sí sólo quieres validar sin guardar datos no usar (expresion).

  11. No tengo tiempo para leerlo entero pero te diré cómo simplificar más el primer ejemplo que es el que he leido:

    [php]
    $string = «userNaME4234432_»;
    if (preg_match(‘/^[\w]{4,28}$/’, $string)) {
    echo «example 1 successful.»;
    }
    [/php]

    La clase de caracteres \w significa lo mismo que [a-ZA-Z0-9_].
    Te dejo un enlace donde puedes ver una muy buena explicació sobre expresiones regulares PCRE.
    http://www.forosdelweb.com/f18/aporte-expresiones-pcre-646110/

  12. Buenas tardes.
    Muy interesante tu material. Gracias.
    Necesito ayuda: he cargado una cantidad de radio buttons con códigos en un buscador php; pero cuando el buscador me devuelve el código buscado lo hace con la imagen del radio. ¿Cómo hacer para elliminar esa imagen en la respuesta?
    Muchas gracias.

    Carlos