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?
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
Buscando en San google di con esta pagina, era la informacion que buscaba, buen tip.
Saludos desde Veracruz,Mexico
hey muchas gracias desde hacia 1 hora estaba buscando la ER del usuario muchas gracias
muy bueno, muchas gracias
necesito codigo para validar un correo electronico
Al fin pude encontra una de estas páginas con relación a expresiones regulares.
De antemano.
Gracias
esta chido muchas felicidades va.
Este sitio esta muy bueno para mi que programo en zend-estudio y aqui no aparecen en la ayuda.
Gracias
Muy bueno!!. siempre he qerido hacer expresiones regulares, pero nunca me he dedicado a entenderlas.. XD
Thank….
Muy utiles tus expresiones regulares, gracias!.
muy bueno!!
esa E.R para validar un mail no esta bien hecha, ya q hay correos con puntos, guiones en medio y guines debajo
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
Excelente recopilación de expresiones regulares de uso frecuente, enhorabuena.
Un saludo,
Alejandro Arco
Muy utiles…. la verdad que siempre vienen bien….
Saludos!
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.
Aquí les dejo un tester de expresiones regulares que hice:
vrs.host56[dot]com/noobMatcher/
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}$
gracias!!
no anda
$string = «userNaME4234432_»;
if (preg_match(‘/^[a-zd_]{4,28}$/i’, $string)) {
echo «example 1 successful.»;
}
Si el primer ejemplo no me funciono, aquí esta las correcciones que le hice. /^[a-z0-9_]*$/i
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;}
@sebas:
$string = «userNaME4234432_»;
if (preg_match(‘/^[a-z\d_]{4,28}$/i’, $string)) {
echo «example 1 successful.»;
}
Muy buenos la verdad!
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!!
$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;
el de las fechas esta malo por que me permite ingresar 32/13/2010…
No he encontrado como corregirlo…….
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;
}
Excelente aporte. Buena info
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
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!!!
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);
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!
esta buenazo!!!! las expresiones para poder programar mejor y divertido okkkk………….
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).
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/
‘/^[a-z\d_]{4,28}$/i’
Hola, ¿Podrías desglosar y explicar, aunque sea un poco por encima, para que sirve cada símbolo que has utilizado en la expresión?.
Gracias.
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