Macro para comprobar que una dirección de correo sea válida

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
prohairesis
Mensajes: 8
Registrado: Jue May 13, 2021 8:26 pm

Macro para comprobar que una dirección de correo sea válida

Mensaje por prohairesis »

Hola buenas tardes!!

Estoy tratando de elaborar una macro que compruebe si una dirección de correo electrónico introducida por el usuario es válida
Ya tengo algo armado, y al parecer funciona según las pruebas que hice

Por lo que quiero compartirla por dos razones:
1) Para mejorarla
2) Para que cualquiera pueda utilizarla si lo necesita

Creo que lo que se tiene que considerar para que una dirección de correo electrónico sea válida es lo siguiente:
1)que tenga una cierta cantidad de caracteres (ni muchos ni pocos)
2)que tenga sólo caracteres válidos (creo que son: letras, números y los caracteres especiales: . _ - @)
3)que no empiece ni termine con los caracteres especiales
4)que no tenga 2 caracteres especiales seguidos
5)que tenga una y sólo una @
6)que tenga un y sólo un punto luego de la arroba

Estaré agradecido por cualquier error que me hagan notar
y cualquier sugerencia de alguna validación que se me haya pasado o una manera de simplificar el código será bienvenida

el código por el momento es el siguiente:

Código: Seleccionar todo

sub ValidarCorreo()
dim sCorreo as string
dim sCaracter as string
dim iSeguidos as integer
dim bSeguir as integer
dim iPosArroba as integer
dim iPosPunto as integer
dim C1 as integer, C2 as integer

		sCorreo = trim(inputBox("Ingresa el correo electrónico"))
		if len(sCorreo) > 7 and len(sCorreo) < 50 then 'cantidad de caracteres del correo
			sCorreo = Lcase(sCorreo)
			bSeguir = true
			For C1 = 1 To Len(sCorreo) 'corroboramos que sea un correo válido
				sCaracter = Mid(sCorreo,C1,1) 'deletrea
				C2 = InStr(1, "._-@abcdefghijklmnopqrstuvwxyz0123456789", sCaracter, 0) 'muestra la posición de la cadena
				if C2 = 0 then 'si encuentra un caracter no válido
					msgBox "caracteres no válidos"
					C1 = Len(sCorreo)
					bSeguir = false
				end if
				if bSeguir = true and (C2 = 1 and C1 = 1) or (C2 = 2 and C1 = 1) or (C2 = 3 and C1 = 1) or (C2 = 4 and C1 = 1) then 'comienza con . _ - @
					msgBox "no puede comenzar con . _ - @"
					C1 = Len(sCorreo)
					bSeguir = false
				end if
				if bSeguir = true and (C2 = 1 and C1 = Len(sCorreo)) or (C2 = 2 and C1 = Len(sCorreo)) or (C2 = 3 and C1 = Len(sCorreo)) or (C2 = 4 and C1 = Len(sCorreo)) then 'termina con . _ - @
					msgBox "no puede terminar con . _ - @"
					C1 = Len(sCorreo)
					bSeguir = false
				end if
				if bSeguir = true and C2 = 1 or C2 = 2 or C2 = 3 or C2 = 4 then 'caracteres especiales seguidos
					iSeguidos = iSeguidos + 1
					if iSeguidos > 1 then
						msgBox ". _ - @ no pueden estar seguidos"
						C1 = Len(sCorreo)
						bSeguir = false
					end if
				else
					iSeguidos = 0
				end if
				if bSeguir = true and (C2 = 4 or C1 = Len(sCorreo)) then 'que no haya más de una @
					if iPosArroba <> 0 or C1 = Len(sCorreo) then
						msgBox "debe haber una y sólo una @"
						C1 = Len(sCorreo)
						bSeguir = false
					end if
					iPosArroba = C1
				end if
				if bSeguir = true and iPosArroba <> 0 and (C2 = 1 or C1 = Len(sCorreo)) then  'que haya un y sólo un punto luego de la @
					if iPosPunto <> 0 or C1 = Len(sCorreo) then
						msgBox "debe haber un y sólo un punto luego de la @"
						C1 = Len(sCorreo)
						bSeguir = false
					end if
					iPosPunto = C1
				end if
			next
			if bSeguir = true then
				msgBox "dirección de correo electrónico válida"
			end if
		else
			msgBox "debe tener entre 8 y 50 caracteres"
		end if
end sub
gracias!
"Lo que importa no es lo que te sucede, si no como reaccionas ante ello" Epicteto
LibreOffice 7.0.5.2 | Manjaro
Karos
Mensajes: 45
Registrado: Mar Feb 02, 2021 7:53 pm

Re: Macro para comprobar que una dirección de correo sea vál

Mensaje por Karos »

Que no lleve el punto después de la arroba ('micorreo@.gmailcom', por ejemplo) ni al final 'micorreo@gmailcom.' pero este último caso creo que ya lo tienes cubierto en los caracteres especiales que no puedan ir ni al principio ni al final.
Que después de la arroba tenga, al menos, 1 carácter válido, excepto el punto.
Avatar de Usuario
iagodb
Mensajes: 220
Registrado: Lun Jul 18, 2016 11:03 am
Ubicación: Narón (A Coruña)

Re: Macro para comprobar que una dirección de correo sea vál

Mensaje por iagodb »

Quita la restricción número 6. Hay muchas direcciones de correo válidas con 2 puntos después de la arroba ( ...@subdominio.dominio.com )
Libreoffice 7.0 (x64) / Windows 10 Pro
Karos
Mensajes: 45
Registrado: Mar Feb 02, 2021 7:53 pm

Re: Macro para comprobar que una dirección de correo sea vál

Mensaje por Karos »

¿Entonces sí puede haber correos válidos que lleven un punto después de la arroba, aunque sea algo bastante raro?
Avatar de Usuario
iagodb
Mensajes: 220
Registrado: Lun Jul 18, 2016 11:03 am
Ubicación: Narón (A Coruña)

Re: Macro para comprobar que una dirección de correo sea vál

Mensaje por iagodb »

@. no pero @texto.texto.com sí que puede haber, y no es para nada raro.
Libreoffice 7.0 (x64) / Windows 10 Pro
Karos
Mensajes: 45
Registrado: Mar Feb 02, 2021 7:53 pm

Re: Macro para comprobar que una dirección de correo sea vál

Mensaje por Karos »

Ok, pues habrá que meter también esa regla de validación. ;-).
Responder