"El diseño es el embajador silencioso de tu marca"
- Paul Brand

Expresiones regulares

Las expresiones regulares son tan útiles como difíciles de entender en muchos casos, gracias a ellas podemos encontrar patrones en una cadena de texto.

Raro es encontrarse un programador que diga que las expresiones regulares no son eficaces, como también es poco común encontrar a gente que viendo un patrón sea capaz de crearlas al vuelo.

Esto se debe a que su sintaxis no es sencilla, y las expresiones regulares complejas requieren de bastante trabajo.

No hay recetas mágicas para construirlas pero particularmente me han ayudado bastante algunas cheat sheets que explican su sintaxis, así que he traducido una para que la podais consultar.

Cheatsheet

Anclajes
^
Comienzo de un string, o de una linea en un patrón multilinea
\A
Comienzo de un string
$
Final de un string, o de una linea en un patrón multilinea
\Z
Final de un string
\b
Límite de palabra
\B
No límite de palabra
\<
Comienzo de palabra
\>
Final de palabra
Clases de caracteres
\c Caracter de control
\s Espacio en blanco
\S No espacio en blanco
\d Dígito
\D No dígito
\w Palabra
\W No palabra
\x Dígito hexadecimal
\O Dígito octal
Cuantificadores
* Cero o más ocurrencias
+ Una o más ocurrencias
? Cero o una ocurrencia
{n} n ocurrencias
{n,} n ocurrencias o más
{n,m} al menos n ocurrencias y máximo m ocurrencias
Caracteres especiales
\n Salto de linea
\r Retorno de carro
\t Tabulación horizontal
\v Tabulación vertical
\f Caracter de avance de formulario
\xxx Caracter octal
\xhh Caracter hexadecimal
Agrupaciones
. Cualquier caracter salvo el salto de linea (\n)
(a|b) a o b
(…) Grupo
[abc] Rango (en este caso a, b o c)
[^abc] Fuera del rango (en este caso que no sea a, b o c)
[a-q] Rango de letras minúsculas
[A-Q] Rango de letras mayúsculas
[0-7] Rango de números
Modificadores
g Búsqueda global
i * No sensible a mayúsculas/minúsculas
m * Múltiples líneas
Aserciones
?= Si el predicado futuro coincide
?! Si el predicado futuro no coincide
?() Condicional If
?()| Condicional If/Else

Vistas las tablas y para hacernos una idea, esta es una expresión regular típica.

 

¿Qué es lo que comprueba?

Podemos analizar brevemente los bloques que tiene:

  1. Lo primero que vemos es ^ que quiere decir «que comience por».
  2. Luego esta el grupo [a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-] que como se aprecia permite cualquier letra minúscula o mayúscula, cualquier dígito y un buen número de caracteres especiales, así que puede comenzar por todo esto.
  3. A continuacion tenemos un + que obliga a que a continuación tenga que existir una o más veces el caracter @
  4. Despues volvemos a tener otro grupo, en este caso[a-zA-Z0-9-] que permite letras, dígitos y el guión medio.
  5. Por último tenemos otro + y un grupo (?:\.[a-zA-Z0-9-]+)*$ que obliga a que se termine con un . y otro caracter que sea letra, dígito o el guión medio.

Este es el patrón para comprobar direcciones de correo electrónico propuesto por la w3c, podeis verlo aquí.

Este es muy poco restrictivo y no lo recomiendo usar, pero sirve como ejemplo básico de una expresión regular para filtrar emails.

The following two tabs change content below.
Especialista en diseño web responsive, programador html5, css3, jquery, php y java.

Latest posts by Óscar Lijó (see all)