8 expresiones regulares para PHP muy útiles

37 comentarios Carlos Leopoldo Por On 19 de octubre de 2007

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?

30 comentarios

  1. Soporte Tonto
    19 de octubre de 2007 at 6:27 PM #

    Muy interesante. Yo suelo programar en ASP, y hay algunas pequeñas diferencias. En cualquier caso, las expresiones regulares suelen ser muy útiles.

    Para agradecerte tu ayuda, te dejo este meme con mucho cariño ;-)

    http://soportetonto.blogspot.com/2007/10/por-que-escribo-este-blog.html

  2. Gabo
    3 de diciembre de 2007 at 2:46 PM #

    Buscando en San google di con esta pagina, era la informacion que buscaba, buen tip.

    Saludos desde Veracruz,Mexico

  3. samuel
    12 de febrero de 2008 at 11:06 PM #

    hey muchas gracias desde hacia 1 hora estaba buscando la ER del usuario muchas gracias

  4. Luis Jonathan
    29 de marzo de 2008 at 2:59 PM #

    muy bueno, muchas gracias

  5. adriana
    5 de agosto de 2008 at 12:40 PM #

    necesito codigo para validar un correo electronico

  6. Edison
    8 de octubre de 2008 at 12:29 PM #

    Al fin pude encontra una de estas páginas con relación a expresiones regulares.

    De antemano.

    Gracias

  7. fidel mar
    8 de octubre de 2008 at 3:28 PM #

    esta chido muchas felicidades va.

  8. Yisel
    16 de noviembre de 2008 at 12:53 AM #

    Este sitio esta muy bueno para mi que programo en zend-estudio y aqui no aparecen en la ayuda.
    Gracias

  9. Ariel
    26 de enero de 2009 at 1:46 PM #

    Muy bueno!!. siempre he qerido hacer expresiones regulares, pero nunca me he dedicado a entenderlas.. XD

    Thank….

  10. Janckos
    10 de abril de 2009 at 8:16 PM #

    Muy utiles tus expresiones regulares, gracias!.

  11. Martin Gonzalez
    19 de mayo de 2009 at 12:53 PM #

    muy bueno!!

  12. Derleth
    29 de junio de 2009 at 8:21 PM #

    esa E.R para validar un mail no esta bien hecha, ya q hay correos con puntos, guiones en medio y guines debajo

  13. Derleth
    1 de julio de 2009 at 7:04 AM #

    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

  14. desarrollo web
    23 de julio de 2009 at 4:52 PM #

    Excelente recopilación de expresiones regulares de uso frecuente, enhorabuena.

    Un saludo,
    Alejandro Arco

  15. DAI Media
    1 de septiembre de 2009 at 7:50 AM #

    Muy utiles…. la verdad que siempre vienen bien….
    Saludos!

  16. vrS
    12 de septiembre de 2009 at 1:31 PM #

    Ciertamente el de mail esta mal, yo creo que quedaria mejor asi: ^[[:alpha:]][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][^_]+[.][a-zA-Z]{2,4} no se tenga errores pero bueno, mejoró el original de todas formas bien.

  17. vrS
    13 de septiembre de 2009 at 7:00 AM #

    Aquí les dejo un tester de expresiones regulares que hice:
    vrs.host56[dot]com/noobMatcher/

  18. vrS
    15 de septiembre de 2009 at 3:35 PM #

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

  19. rodo
    25 de noviembre de 2009 at 10:57 AM #
  20. sebas
    11 de diciembre de 2009 at 7:44 AM #

    no anda
    $string = “userNaME4234432_”;
    if (preg_match(‘/^[a-zd_]{4,28}$/i’, $string)) {
    echo “example 1 successful.”;
    }

  21. Johan gutierrez
    14 de enero de 2010 at 9:59 AM #

    Si el primer ejemplo no me funciono, aquí esta las correcciones que le hice. /^[a-z0-9_]*$/i

  22. Ghuldan
    16 de febrero de 2010 at 6:42 AM #

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

  23. jesus
    2 de marzo de 2010 at 4:58 AM #

    @sebas:
    $string = “userNaME4234432_”;
    if (preg_match(‘/^[a-z\d_]{4,28}$/i’, $string)) {
    echo “example 1 successful.”;
    }

  24. Maximo
    31 de marzo de 2010 at 4:22 PM #

    Muy buenos la verdad!

  25. diego
    26 de abril de 2010 at 9:46 AM #

    estan buenas lastimas que ya no servirarn mas ya que muchos de tus ejemplos expresiones regulares ya estan deprecated como erig erg ….etc para ello mira el manual oficial http://ar.php.net/PCRE
    o sea esto ya es obsoleto …

    saludos!!

  26. $zervanstyle;
    9 de julio de 2010 at 11:21 AM #

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

  27. juancho
    5 de noviembre de 2010 at 4:47 PM #

    el de las fechas esta malo por que me permite ingresar 32/13/2010…

    No he encontrado como corregirlo…….

  28. crazypg
    9 de noviembre de 2010 at 8:39 PM #

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

  29. CARRARO
    18 de diciembre de 2010 at 10:03 PM #

    Excelente aporte. Buena info

  30. Anonimo
    6 de mayo de 2011 at 1:29 PM #

    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 trackbacks

  1. [...] Carlos Leopoldo – 8 expresiones regulares para PHP muy útiles [...]

  2. [...] Fuente: Carlos Leopoldo [...]

  3. [...] de las 8 expresiones muy útiles para PHP, en The Rough Guide to PHPencontré un listado de las expresiones regulares más usadas en PHP, [...]

  4. [...] 8 expresiones regulares para PHP muy útiles [...]

  5. [...] Dicas por Pinceladas da Web , original por Carlos Leopoldo. [...]

  6. [...] Dicas por Pinceladas da Web , original por Carlos Leopoldo. [...]

Deja un comentario

Tu dirección de correo electrónico nunca será compartida.

*