Validación de email y URL con Extensiones de Clase

En muchas ocasiones necesitamos realizar algún tipo de validación sobre los datos introducidos por el usuario, de modo que nuestra aplicación reciba la información con el formato que realmente espera. Algunos de estos datos pueden ser, por ejemplo, la introducción de una dirección de email y URLs válidos.

Si bien no se trata de una receta totalmente mágica (siempre hay casos que se pueden escapar de la verificación), quiero compartir contigo un par de extensiones de clase que puedes utilizar para validar lo introducido por el usuario, como una dirección de email válida… y también un URL con formato válido.

Antes de comenzar, simplemente hacer el inciso de que una extensión de Clase es un modo realmente conveniente que podemos utilizar para proporcionar funcionalidad adicional sobre una clase ya existente, sin necesidad de que tengamos que crear una subclase de ella.

De modo que lo primero que haremos será añadir un nuevo Módulo al proyecto (por ejemplo, puedes nombrarlo como “Extensiones de String”), y luego añadir un par de métodos globales sobre dicho módulo.

Nombremos el primero de estos métodos como “IsEmail”, utilizando la siguiente signatura en el Panel Inspector:

  • Parámetros: byref extends source as String
  • Tipo Devuelto: Boolean

A continuación sólo tendremos que incorporar el siguiente fragmento de código en el Editor de Código asociado con dicho método:

// Some previous text cleaning

source = source.Trim
source = source.ReplaceAll("""","")
source = source.ReplaceAll(" ","")
source = source.ReplaceAll(Chr(9),"")
source = source.ReplaceAll(Chr(10),"")
source = source.ReplaceAll(Chr(13),"")

If source.Left(1) < Chr(48) Then 
  source = source.Right(source.Length-1)
End If

If source.EndsWith(".") Then
  source = source.Left(source.Length-1)
End If

// Look for a proper email format
Var rx As New RegEx
rx.SearchPattern = "^([a-zA-Z0-9_\-.\+]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,10})$"

Var match As RegExMatch = rx.Search(source)

Return If(match <> Nil, True, False)

Tal y como puedes observar en el código propiamente dicho, este utiliza principalmente toda la potencia proporcionada por las Expresiones Regulares para buscar el formato esperado de una dirección de correo electrónico; si devuelve una coincidencia, entonces significará que, probablemente, se trata de una dirección de correo electrónico válida (o bien parece ser válida).

¿Qué significa la palabra clave “ByRef”? Cuando pasamos datos a un método podemos hacerlo por valor o por referencia. El primero de los casos (probablemente el más común), significa que el método utilizará su propia copia del valor recibido (si bien habría que contemplar casos en los que no es así). Por lo tanto, cualquier cambio realizado no se verá reflejado en la variable original del método que realizase la llamada.

Cuando utilizamos la palabra clave “Byref” estamos indicando a Xojo que nos dé acceso al dato original, y en ese caso las modificaciones realizadas en el método o función también quedarán reflejadas en la variable encargada de almacenar el dato original.

Ahora, en el caso del segundo método añadido al módulo, podemos llamarlo por ejemplo “IsURL”, utilizando la siguiente signatura en el Panel Inspector:

  • Parámetros: byref extends value as String
  • Tipo Devuelto: Boolean

Y escribiendo el siguiente fragmento de código en el Editor de Código asociado:

value = value.Trim

If (Not value.BeginsWith("http://")) and (Not value.BeginsWith("https://")) Then value = "http://"+value

Var rx As New RegEx
rx.SearchPattern = "^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$"

Var match As RegExMatch = rx.Search(value)

Return if(match = nil, False,True)

Como puedes ver, aquí estamos utilizando la misma técnica pero cambiando la cadena que define el patrón a buscar; de modo que se busque una dirección de URL válida entre los datos proporcionados como “fuente” (variable “source”)

Una vez hecho esto, puedes comenzar a utilizar estas nuevas extensiones de método desde tu código para validar los datos introducidos por el usuario. Como hemos dicho previamente, estas no son recetas mágicas… pero sí que harán su trabajo en la mayoría de los casos.

Por ejemplo, puedes usarlos de la siguiente forma:

Var email, webaddress As String

email = EmailField.value // EmailField is a TextField
webaddress = WebAddressField.value // WebAddress is a TextField

If email.IsEmail Then

	// The string has the expected email format.
	
End If

If webaddress.IsURL Then

	// The string has the expected URL format.
	
End If

Confío en que encuentres esto de utilidad y, por supuesto, puedes continuar añadiendo más métodos que consideres útiles como extensiones de la clase String o bien cualquier otra clase en tus propios módulos, de modo que puedas utilizarlos en cualquiera de tus proyectos… sin necesidad de tener que volver a escribir el mismo código una y otra ves; y sin tener que crear subclases cuando realmente sólo necesitas una pequeña adición sobre una ya existente.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *