Mis Presentaciones en el Oracle Open World 2014

Un post muy breve para informarles de las dos presentaciones que voy a realizar en el Oracle Open World 2014.

Session ID:         UGF4482
Session Title:     “Getting Started with SQL Pattern Matching in Oracle Database 12c
Venue / Room:  Moscone South – 301
Date and Time:  9/28/14, 13:30 – 14:15

Session ID:          CON4493
Session Title:      “Regular Expressions in Oracle Database 101”
Venue / Room:   Moscone South – 303
Date and Time:   10/2/14, 13:15 – 14:00

No olviden de confirmar que las presentaciones sean en los salones que indico porque a veces hacen cambios de última hora.

Espero verlos por allá!

Anuncios

Tratando de validar direcciones de correo electrónico usando expresiones regulares

Traducción del post original publicado en Julio 10 2013.

Después de mi presentación en Kscope13, uno de los asistentes se me acercó a preguntarme si alguna vez había tratado de validar direcciones de correo electrónico utilizando expresiones regulares. Ésta persona no había escuchado sobre expresiones regulares antes de la presentación y me contó que en su trabajo estaba tratando de crear una función PL/SQL (la cual se estaba volviendo muy compleja) que se encargara de dicha funcionalidad. Le ofrecí ver si podía lograr algo y escribir una entrada en el blog.

Después de algunos intentos y de entender que no es una tarea sencilla, me decidí por la siguiente expresión regular: ^[a-z0-9._-]+@[a-z0-9.-]+\.[a-z]{2,3}$

En éste caso, yo considero que una dirección de correo electrónico es correcta si la misma empieza con una secuencia de caracteres que puede incluir cualquier letra o dígito, el punto, el guión o el guión bajo, a continuación el símbolo @ seguido por una secuencia de caracteres que puede incluir cualquier letra o dígito, el  punto o el guión y finalizando con un punto seguido de una secuencia de caracteres que contiene entre dos y tres letras.

Está claro que una dirección de correo electrónico puede contener otros caracteres; pero decidí utilizar aquellos que se ven con mayor frecuencia. No hay que olvidar que ésta expresión regular solamente considera letras minúsculas y que podemos pasar un parámetro a las funciones regexp en SQL para indicar que deseamos validar direcciones sin importar si las letras son mayúsculas o minúsculas.

Veamos cómo funciona todo utilizando datos que se encuentran en una tabla de clientes:

SQL> select * from clients;

NAME_CLIENT               PHONE                EMAIL
------------------------- -------------------- ------------------------------
FOUNTAIN,VICKIE L                              Vickie.L.Fountain@mail.com
ORTIZ,GENOVEVA M                               123ortiz.gmail.com
MALDONADO,TERESA                               teresa-maldonado@amazon.store
BARAJAS-RAMIREZ,AMY
SERRANO,GRACE
BALDA GALO                (512) 254-1694       galo@email.mydomain.net

6 rows selected.

Se puede observar que las direcciones de correo que siguen el patrón de la expresión regular pertenecen a los registros 1 y 6 y que las direcciones de correo en los registros 2 y 3 no siguen el patrón.

Podemos utilizar la siguiente sentencia SQL para encontrar los registros que siguen el patrón definido en la expresión regular:

SQL> select *
  2 from clients
  3 where regexp_like (email,'^[a-z0-9._-]+@[a-z0-9.-]+\.[a-z]{2,3}$','i');

NAME_CLIENT               PHONE                EMAIL
------------------------- -------------------- ------------------------------
FOUNTAIN,VICKIE L                              Vickie.L.Fountain@mail.com
BALDA GALO               (512) 254-1694        galo@email.mydomain.net

2 rows selected.

Se debe notar que la primera dirección de correo es considerada correcta a pesar de que no se definieron caracteres en mayúsculas en la expresión regular. Ésto ocurre debido al uso del parámetro ‘i’ en la función, lo que le indica que no importa si los caracteres están en mayúsculas o minúsculas.

Ahora busquemos los registros que no siguen el patrón definido en la expresión regular:

SQL> select *
  2 from clients
  3 where not regexp_like (email,'^[a-z0-9._-]+@[a-z0-9.-]+\.[a-z]{2,3}$','i');

NAME_CLIENT               PHONE                EMAIL
------------------------- -------------------- ------------------------------
ORTIZ,GENOVEVA M                               123ortiz.gmail.com
MALDONADO,TERESA                               teresa-maldonado@amazon.store

2 rows selected.

En éste caso, la primera dirección de correo no sigue el patrón definido en la expresión regular ya que falta la @. La segunda dirección utiliza un dominio formado por cuatro letras pero el patrón que estamos tratando de validar lo limita a dos o tres letras.

En resumen, éstos ejemplos muestran cómo empezar a realizar validaciones de direcciones de correo electrónico usando expresiones regulares. El patrón utilizado es bien básico, no es perfecto y puede ser mejorado; pero siempre dependerá del formato (o los formatos) de direcciones de correo electrónico que se desee validar y la complejidad de su representación.

Espero que les sea de ayuda.