sábado, 27 de marzo de 2010

Expresiones Regulares

Fabian Castro probablemente familiar y quizás el sobrino favorito de Fidel el amable Castro, escribió un tutorial muy interesante en su blog sobre el manejo de expresiones regulares y después de horas y horas de ruegos, sobornos, calumnias y finalmente de secuestrar a su hermano y empezar a enviarle uno a uno los dedos de las manos y los pies en sobres de manila, aceptó que lo copiara y pegara en este blog como un articulo escrito por mi pero que tiene toda la autoría de él.

^[a-zA-Z0-9_-]{2,}@[a-zA-Z0-9_-]{2,}\.[a-zA-Z]{2,4}(\.[a-zA-Z]{2,4})?$ ¿Alguna vez han visto algo como esto? Tal vez en las clases de matemáticas o calculo algebraico ya que esto parece una fórmula matemática o física, o algo así, que solo lo entendería un ingeniero de la NASA (¿porque siempre ellos son los mejores?), pero no amigos esto es una expresión regular una sección de código universal que se usa en los buscadores de palabras o simplemente en una validación de datos, pero ¿cómo que validación de datos? Si eso se puede hacer contra una Base de datos y ya!, pero la verdad amigos del conocimiento eso gasta mucho recurso de sistema y además es tedioso para el usuario final de alguno de nuestros programas, por ejemplo datos como correos, teléfonos, celulares, direcciones entre otros datos que tienen una estructura definida o estándar.

Banner, expresiones regulares


--
por ejemplo:
• Un correo siempre tendrá un símbolo
@ en la mitad del correo
• Un Teléfono sea fijo o celular siempre serán números
Eso por mencionar algunos, esos datos se pueden validar en el lado del usuario, solo con unas pocas líneas de código en cualquier lenguaje de programación.

La mayoría por no decir todos los lenguajes de programación soportan expresiones regulares entre ellos están:
• JAVA
• .Net Framework
• javaScript
• PHP
• Pyton
• Pealr
• ActionScript 3 (AS3)

Las expresiones regulares o también llamados patrones nos sirven como ya mencionamos para validar datos, pero para ello usan una estructura estándar para realizar las validaciones por ejemplo en
^[a-zA-Z0-9_-]{2,}@[a-zA-Z0-9_-]{2,}\.[a-zA-Z]{2,4}(\.[a-zA-Z]{2,4})?$ cada símbolo representa algo y sirve para algo dentro de la cadena expliquemos primero los símbolos básicos como son :
^ : representa el inicio de la cadena, eso quiere decir que el dato a validar debe empezar por el carácter o grupo de caracteres inmediatamente siguiente
$ : representa el fin de la cadena, es decir que el dato a validar debe terminar en el carácter o grupo de caracteres inmediatamente anterior
[] : representa un grupo de meta-caracteres, es decir un rango de caracteres por ejemplo [a-z] representa que solo habrán letras en minúscula mientras que [A-Z] representaría letras en mayúscula, dentro de ellos se pueden colocar varios rangos y el los validara igual por ejemplo [a-zA-Z0-9_-] representa todas las letras ya sean mayúsculas o minúsculas y todos los números del 1 al 9 además de ellos acepta los caracteres de línea(-) y línea baja(_).
{} : representa un cuantificador de valor, es decir que el carácter inmediatamente anterior solo se repetirá sienta cantidad de veces por ejemplo A{3} quiere decir que la letra A mayúscula se repetirá 3 veces ni más ni menos, mientras A{2,} representara que la letra A se repetirá mínimo 2 veces máximo infinito, y A{2,5} representa que la letra A mayúscula se repetirá entre 2 a 5 veces
(): representa un grupo de caracteres especifico por ejemplo (a|b|c)al quiere decir que la palabra tiene que empezar en a, b o c siendo validas aal, bal y cal ya que b y c están en el grupo de caracteres
| : representa una decisión de OR en los grupos de caracteres. Solo se aplica en paréntesis ()
\ : representa el escape de un carácter: es decir que encuentre ese carácter en especifico, por ejemplo si queremos que nuestra expresión regular encuentre cadenas que contengan {} o [] tendríamos que colocarlas asi \{\} \[\] ya que [] y {} son usados por las expresiones regulares en los patrones creados.
? : Es un cuantificador que dice que el carácter o grupo de caracteres inmediatamente anterior puede aparecer cero (0) o una (1) vez en la cadena
* : es un cuantificador que dice que el carácter o grupo de caracteres inmediatamente anterior se repite de cero (0) a muchas veces
+ : es un cuantificador que dice que el carácter o grupo de caracteres inmediatamente anterior se repite de una(1) a muchas veces

Estos son los símbolos más importantes en la creación de expresiones regulares y los más usados por ende.

Ya que sabemos cuál es la utilidad de cada simbolito ahora si expliquemos que hace y como lo hace nuestra expresión regular :
^[a-zA-Z0-9_-]{2,}@[a-zA-Z0-9_-]{2,}\.[a-zA-Z]{2,4}(\.[a-zA-Z]{2,4})?$

cojamos parte por parte de la expresión y expliquémosla paso a paso :


Esta parte indica que la cadena a validar inicia con cualquier carácter alfanumérico línea o línea baja y que mínimo deben existir 2 caracteres


Esta parte de la cadena indica que continua un carácter obligatorio en cual es el
@, si ese símbolo es obligatorio esto es un correo, luego es seguido de varios caracteres alfanuméricos donde son mínimo 2 y debe continuar con un punto (.), ya que el punto también significa cualquier carácter en las expresiones regulares se le coloca el carácter de escape ( \ ). Representa en nombre del dominio donde esta el correo ya sea Hotmail o Yahoo


Representa la segunda parte del dominio ya sea
.com o .es


Representa una parte opcional en los correos por ejemplo en dominios que sean como entidad.edu.co sirve para validar la ultima parte si es que existe y además indica el fin de la línea

En un próximo Tutorial explicaremos como implementarlas en el lenguaje de programación JAVA.

Repito, este tutorial es de la autoria de @dexterfcp (Fabian) si hay que comentar o agradecerle por hacernos menos ignorantes, se le debe hacer a él.

16 comentarios:

  1. Esto si es una biblia de conocimiento... que bien explicado felicitaciones a ambos

    ResponderEliminar
  2. Es una placer ayudar y publicar contenido y esperamos seguir agregando más tutoriales y cada vez de mayor calidad.

    Gracias por la visita y el comentario

    ResponderEliminar
  3. Hermoso, nunca mejor explicado!!

    Saludos.

    ResponderEliminar
  4. Bacano que esten publicadas tan buenas explicaciones de temas tan importantes para un aprendiz.
    Muy bueno

    ResponderEliminar
  5. Muy chingon!, gracias por compartir el conocimiento.

    ResponderEliminar
  6. Gracias por compartir indormación valiosa con los demás...... de corazón gracias

    ResponderEliminar
  7. Cómo hago esto http://www.codeinthemorning.com/code-katas/problems/formula-validator/ en PHP

    ResponderEliminar
  8. Excelente explicación.

    ResponderEliminar
  9. Muchas gracias por esa explicacion mas detallada

    ResponderEliminar
  10. Me podrian ayudar a validar la direccion de una casa?

    ResponderEliminar
  11. Las expresiones regulares con estándar? es decir dada una expresión regular ésta funciona en cualquier lenguaje de programación que la soporte?

    ResponderEliminar
  12. Saludos Rey Fernando, así es son estándar para todo lenguaje de programación

    ResponderEliminar
  13. Muchas gracias Juan Sebastian por este post, muy bueno, por lo menos para alguien que esta queriendo aprender sobre expreciones Regulares, gracias!! un Saludo

    ResponderEliminar
  14. Usted, señor, es un capo!
    Saludos y muchas gracias!

    ResponderEliminar