Aviso: Este post fue tomado del blog de Fabian FCP y a mi parecer es información muy útil que vale la pena compartir (Espero que el autor no se moleste por esta publicación, de ser así, háganoslo saber, gracias).
^[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 muchos datos que tienen una estructura definida o estándar
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
@jclandero23