Ver Mensaje Individual
  #7  
Antiguo 24-11-2016
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 25
Delphius Va camino a la fama
Cita:
Empezado por 0x90 Ver Mensaje
Definitivamente como hay otros compañeros que han objetado, hay maneras mucho mas sencillas para validar un correo electronico, y en cuanto a validación se refiere RegEX (Expresión Regular) es la mejor solución/opción al caso.

Con muy poco esfuerzo podremos tener un verificador de Correos Electronicos en unos pocos minutos.

Requerimientos:
Código:
Libreria: TPerlRegEx
Veamos como podemos validar un Correo Electronico en un formulario basico:
Código:
(x1) Edit = edt1
(x1) Botón = btn1
(x1) Label = lbl1
Variables Globales:
Código:
var
  parser: TPerlRegEx;
  list: TStringList;
  found: boolean;
  str: string;
  i: Integer;
  strToMatch: string;
Codigo:
Código:
try
    list := TStringList.Create;
    try
      parser := TPerlRegEx.Create;
      try
        parser.RegEx := '(^[\w-]+(?:\.[\w-]+)*@(?:[\w-]+\.)+[a-zA-Z]{2,7}$)';
        strToMatch := edt1.Text;
        parser.Subject := strToMatch;
        found := parser.Match;
        if found = True then
        begin
           lbl1.Caption := 'VALIDO!';
        end
        else
        begin
           lbl1.Caption := 'INVALIDO!';
        end;
      finally
        parser.Free;
      end;
    finally
      list.Free;
    end;
  except
    on E: Exception do
    Application.MessageBox(PChar(E.Message),'Verificador de Correos Electronicos', MB_OK);
  end;
Nota: Como no puedo aun poner links ni imagenes, no puedo poner como se ve mi formulario, ni dar referencias de donde saque la información, pero si saben buscar en Google, sabrán buscar por aqui y por allá y darán con el martillo en el clavo

Cabe mencionar que la Expresión Regular que se utiliza en este caso, identifica y reconoce el 99.99% de los Correos Electronicos!
¿Pero quien carajo sos vos para decir en el título de tu post: NO, NO, NO. Y que así no se hace?
Es una propuesta de tantas. Si se tratara de un error conceptual bueno, te acepto la corrección, pero no es el caso.
Es una alternativa y propuesta PERSONAL a considerar y como tal no puede ser descartada. Sobre todo si quien pretende descartarla es un usuario que apenas lleva 2 mensajitos y viene prepotente. Acá suficiente tiene el foro con ciertos usuarios prepotentes , entre ellos me incluyo ¿está claro?

De que usando expresiones regulares se puede, se puede. Haciéndolo por una máquina de estados, TAMBIÉN se puede.
¿Cuál de las dos es más eficiente? Para sacarnos las dudas concretamente se debería hacer una prueba de perfomance.

Ahora, lo que si me animo a decir que lapropuesta basada en la máquina de estados va a los bifes... directo a la problemática.
Cuando uno usa expresiones regulares, indirectamente está generando una máquina de estados. De hecho, cuando se crea/carga la expresión regular el componente/clase va a necesitar primero armar la máquina de estados y luego procede a analizar la cadena a ver si la cumple.

En última ambos procesos son equivalentes, pero la primera opción es mucho más directa. No descarten que es posible que les sace algunos ciclos de procesador de ventaja a la propuesta de expresiones regulares.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita