Comprobar expresiones regulares PHP 5

Las funciones de string vistas anteriormente son muy útiles en la búsqueda y reemplazo de caracteres de una cadena, en cambio no son de utilidad cuando lo que queremos es comprobar si una cadena cumple o no un patrón o formato determinado. Por ejemplo, si nuestro formulario consta de un campo de correo electrónico, nos sería de gran ayuda saber si el usuario introdujo un correo válido o no.


De esta manera, las expresiones regulares nos ayudan a comprobar si el usuario introdujo un correo válido como "alex@aux.org" o si en cambio se equivocó al introducirlo por ejemplo introduciendo dos puntos seguidos "alex@aux..com".

Así, las expresiones regulares son patrones de búsqueda dentro de cadenas. Estos patrones están formados por caracteres especiales que cumplen unas reglas. Estos caracteres son:

PatrónSignificado
aEl carácter a
.Cualquier carácter
^aEmpezando por a
a$Terminando por a
a+1 o más caracteres a
a*0 o más caracteres a
a?0 o 1 caracteres a
\nNueva línea
\tTabulador
\Permite escribir caracteres especiales: \^, \[, \+ ...
(ab)Caracteres a y b agrupados
a|bCarácter a o b
c{n}n veces el carácter c
c{n,}n o más veces el carácter c
c{n,m}Desde n hasta m veces el carácter c
[a-z]Cualquier letra minúscula
[A-Z]]Cualquier letra mayúscula
[0-9]Cualquier número
[abc]a, b ó c
[a-f]Entre a y f (a, b, c, d, f)
[^a]Que no esté el carácter a
[[:alnum:]]Cualquier letra o dígito
[[:alpha:]]Cualquier letra
[[:digit:]]Cualquier dígito
[[:lower:]]Cualquier letra minúscula
[[:punct:]]Cualquier marca de puntuación
[[:space:]]Cualquier espacio en blanco
[[:upper:]]Cualquier letra mayúscula

Para los siguientes ejemplos del control de un correo electrónico, se utilizarán las funciones preg_match() que acepta patrones de expresiones regulares compatibles con Perl, que son las funciones aconsejadas para utilizar ya que las típicas ereg() y eregi() están obsoletas y no es aconsejable su uso.

Pues bien dicho esto comentar que para este tipo de funciones, las expresiones regulares tiene que constar de un delimitador que usualmente es la barra ( / ), esta se coloca al principio y al final de la expresión y no tiene función más que delimitar.

Esta función recibe dos parámetros, el primero es el patrón, y el segundo la cadena a comparar. A continuación podréis ver unos ejemplos de la comprobación de un correo electrónico:
<?php
    $correo1 = "juanfran@alpex.org";
    $patron1 = "/^[a-z]+@[a-z]+\.org$/";

    $correo2 = "juan.fran@al.pex.com";
    $patron2 = "/^[a-z|\.]+@[a-z|\.]+\.(org|com|es)$/";

    $correo3 = "JUANFRAN@pex.com.es";
    $patron3 = "/^[a-z|A-Z|\.]+@[a-z|A-Z|\.]+\.(org|com|es)$/";

    if(preg_match($patron1, $correo1)) {
     echo '<p>$correo1 pasa el patron</p>';
    } else {
 echo '<p>$correo1 no pasa el patron</p>';
    }
 
    if(preg_match($patron2, $correo2)) {
        echo '<p>$correo2 pasa el patron</p>';
    } else {
        echo '<p>$correo2 no pasa el patron</p>';
    }
 
    if(preg_match($patron3, $correo3)) {
        echo '<p>$correo3 pasa el patron</p>';
    } else {
        echo '<p>$correo3 no pasa el patron</p>';
    }
?>
En el primer correo y patrón  como es el más simple, tan solo debemos utilizar los corchetes para poder abarcar todas las letras minúsculas antes y después de la @, esta se pone tal cual al igual que el .org y el único punto a tener en cuenta es el uso de los + para decir que antes y después de la @ puede haber cualquier letra 1 o más veces.

En el segundo caso, se añade la posibilidad de usar puntos en el nombre y el servidor de correo, para ello añadimos una condición o lógica ( | ) en los corchetes para abarcar cualquier letra minúscula o carácter de puntuación sin olvidarse de colocar la barra \ para escapar el carácter especial punto. Además se controla la posibilidad de tener varios dominios raíz como el .com, .org o .es sustituyendo el .org anterior por las terminaciones agrupadas con o lógica (.org|.com|.es), que permite que el correo tenga alguna de esas terminaciones.

Por último el tercer caso es el más completo, añadiendo la posibilidad de utilizar letras mayúsculas en el correo añadiendo con un o lógico el rango [A-Z].

Reemplazar patrones
Una vez hemos entendido y sabemos utilizar la función preg_match(), sabremos utilizar sin problemas las demás funciones de trabajo con patrones, en este caso mostraré un ejemplo del uso de preg_replace(), que junto con la anterior, son las funciones más utilizadas con expresiones regulares.

Para empezar, esta función recibe 3 parámetros, el primer es el patrón, el segundo el la cadena que reemplazará a los patrones encontrados, y el tercer parámetro es la cadena a buscar y comparar.

Un ejemplo de su uso seria:
<?php
    $correo3 = "JUANFRAN@pex.com.es";
    $patron3 = "/^[a-z|A-Z|\.]+@[a-z|A-Z|\.]+\.(org|com|es)$/";
 
    echo ("El correo $correo3 pertenece a " . 
        preg_replace($patron3, "Juan Francisco L&oacute;pez", $correo3));
?>
Como cabe esperar, la salida de este código es: El correo JUANFRAN@pex.com.es pertenece a Juan Francisco López

Comentarios

  1. Al fin pude entender como se construyen las expresiones regulares!!!! muchísimas gracias, siempre buscaba un articulo que lo explicará de manera sencilla y con ejemplos- GRACIAS!!!!

    ResponderEliminar

Publicar un comentario

Si tenéis alguna duda o sugerencia, no dudéis en comentar. ;)

Entradas populares de este blog

Calcular factorial de un numero en JAVA

Ordenar cualquier array con SORT en JAVA

Modificadores de acceso (public, protected y private) JAVA