Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Función Para Comprobar Que Un Email Es Correcto
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Función Para Comprobar Que Un Email Es Correcto 
 
Hola.

Para comprobar que un email es sintácticamente correcto hay que comprobar que el signo arroba separe al usuario del dominio.

Si no hay arroba el email no es correcto.
Si hay mas de una arroba el email no es correcto.
Si el usuario no se ajusta a la RFC 5321 y la RFC 5322 el email no es correcto.
Si el dominio no se ajusta a la RFC 952 y a la RFC 1123 el email no es correcto.
PRIVATE FUNCTION ComprobarEmail(Email AS String) AS Boolean
  
  DIM Partes AS String[] = Split(email, "@"), Usuario AS String, dominio AS String, valido AS Boolean
  
  IF Partes.max =1 THEN 'si está el signo @ presente una sola vez
    valido = TRUE
  ENDIF
  
  'dividido el email en componentes
  IF valido THEN
    usuario = Partes[0]
    dominio = Partes[1]
  ENDIF
  
  
  'comprobar usuario
  valido = ComprobarUsuario(Usuario)
    
  'comprobar el dominio
  IF valido THEN
    valido = ComprobarDominio(dominio)
  ENDIF
  RETURN valido
END


Para comprobar el usuario hay que cumplir la RFC 5321 y la RFC 5322 que vienen a decir
* Se admitn letras A-Z, a-z, 0-9, y los "!#$%&'*+-/=?^_`{|}~
* No puede comenzar por punto ni haber dos puntos consecutivos  
La función que comprueba el usuario es la siguiente:
PRIVATE FUNCTION ComprobarUsuario(Usuario AS String) AS Boolean
DIM Contador AS Integer, Letra AS String, Valido AS Boolean
  
  ' admite letras A-Z, a-z, 0-9, "! # $ % & ' * + - / = ? ^ _ ` { | } ~"
  ' no puede comenzar por punto ni haber dos puntos consecutivos  
  
  'comprobar que no empieza por punto
  valido = IIf(Left(usuario, 1) <> ".", TRUE, FALSE)
  
  'comprobar que no hay dos puntos consecutivos
  IF valido THEN
    valido = IIf(InStr(usuario, "..") = 0, TRUE, FALSE)
  ENDIF
  
  'recorrer las letras para verificarlas
  IF valido THEN
    FOR Contador = 1 TO Len(usuario)
      letra = Mid(usuario, contador, 1)
      'comprobar si es letra
      valido = IIf(IsLetter(letra), TRUE, FALSE)
      'comprobar si es numero
      IF NOT valido THEN
        valido = IIf(IsDigit(letra), TRUE, FALSE)
      ENDIF
      'comprobar si la letra es uno de estos caracteres ! # $ % & ' * + - / = ? ^ _ ` { | } ~
      IF NOT valido THEN
        valido = IIf(InStr("!#$%&'*+-/=?^_`{|}~", letra) > 0, TRUE, FALSE)
      ENDIF
      IF NOT valido THEN
        BREAK 'si no válido no mirar mas
      ENDIF
    NEXT
  ENDIF
  RETURN valido
END

Una vez comprobado que el usuario es válido hay que comprobar el dominio

El dominio puede ser un hostname o bien una IP. En este ejemplo se utiliza para comprobar si es una IP válida el código definido aquí
Comprobación de IP
En caso de que no sea una IP hay que comprobar que el dominio cumple la RFC 952 y a la RFC 1123 que vienen a decir:
* el dominio puede formar parte de varios grupos de letras o números separados por punto. Por ejemplo el caso "empresa.com" se compone del grupo "empresa" y el grupo "com" concatenados por un punto.
* Cada grupo puede contener letras a-z, 0-9 y el signo -
* Un grupo no puede comenzar por punto ni por guión.

Aquí hablo de grupos porque únicamente subdivido un string para verificar cada parte, pero se suele hablar de dominios y subdominios donde "empresa.com" tendría el dominio "com" y el subdominio "empresa". Yo me refiero a ambos como "grupos" porque solo examino sus strings para saber si son sintácticamente correctos.

Este es el código para comprobar un dominio. Es el mismo caso de comprobar un hostname.
PRIVATE FUNCTION ComprobarDominio(dominio AS String) AS Boolean
  DIM ContadorGrupos AS Integer, ContadorLetras AS Integer, letra AS String, Grupos AS String[]
  DIM Valido AS Boolean
  'el dominio puede ser un hostname o una ip. Para saberlo dividir en dominio en sus partes por puntos
  'el dominio puede formar parte de varios grupos de letras o números separados por punto
  
  valido = comprobarip(dominio) 'comprobar si el dominio es una ip valida
    
  IF NOT valido THEN 'si no es una ip hay que comprobar si el dominio es válido
    Grupos = Split(dominio, ".") 'separar los distintos grupos
      
    'revisar cada grupo obtenido
    FOR contadorGrupos = 0 TO Grupos.Max        
    'el dominio puede contener letras a-z, 0-9, "-"
    'no pueden empezar por guion ni por punto
    
    'comprobar que no empieza por guión ni por punto
    IF Left(grupos[ContadorGrupos], 1) = "." OR Left(grupos[ContadorGrupos], 1) = "-" THEN
      valido = FALSE
    ELSE
      FOR contadorletras = 1 TO Len(grupos[contadorGrupos])
        letra = Mid(Grupos[contadorGrupos], contadorLetras, 1)
        
        'comprobar si es letra        
        valido = IIf(IsLetter(letra), TRUE, FALSE)        
        'comprobar si es numero
        IF NOT valido THEN
          valido = IIf(IsNumber(letra), TRUE, FALSE)
        ENDIF
        
        'comprobar si es guion o punto
        IF NOT valido THEN
          valido = IIf(InStr("-.", letra) > 0, TRUE, FALSE)
        ENDIF        
        IF NOT valido THEN
          BREAK  'si hay algún caracter no válido no mirar mas
        ENDIF
      NEXT
      IF NOT valido THEN
        BREAK  'si hay algún caracter no válido no mirar mas
      ENDIF
    ENDIF
    IF NOT valido THEN
      BREAK  'si el grupo es inváido no mirar mas grupos
    ENDIF
    NEXT
  ENDIF
RETURN valido
  
END
 


y como resultado la forma de utilizar todo esto es:
valido=comprobaremail(texto.text)

Valido valdrá true o false según que el email sea sintácticamente correcto o no

 
 



 
última edición por soplo el Martes, 12 Octobre 2010, 16:58; editado 2 veces 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Función Para Combrobar Que Un Email Es Correcto 
 
Muy interesante, Soplo.

Saludos
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Función Para Comprobar IP soplo Aplicaciones/Fragmentos de Código 2 Viernes, 01 Julio 2011, 10:47 Ver último mensaje
Invitado
No hay nuevos mensajes Bateria De Test Para Una Función. Ejercicios Shell General 2 Martes, 15 Septiembre 2015, 11:25 Ver último mensaje
angelhjose
No hay nuevos mensajes Web Email Etc. Para Un Autonomo O Pyme. tincho General 7 Domingo, 12 Febrero 2017, 16:21 Ver último mensaje
jguardon
No hay nuevos mensajes Función Para Mover Un Archivo A La Papelera. tincho Aplicaciones/Fragmentos de Código 8 Miercoles, 25 Septiembre 2019, 22:36 Ver último mensaje
tincho
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron