Esta es una muy buena idea, aunque creo que no hay que descartar la validación gramatical.
Ya anteriormente se ha discutido esto, por ejemplo, en el hilo
Como Saber si una Dirección de Correo es Válida????. En esa ocasión se planteó el uso de expresiones regulares y se habló de
RegExp Studio, que me parece un buen enfoque.
Usar TRegExpr es cosa sólo de incluir una unidad en el proyecto así que no necesitamos instalar nada ni insertar componentes ni depender de dlls externas.
En el hilo mencionado se propone una expresión regular
Código:
[\w\d\-\.]+@[\w\d\-]+(\.[\w\d\-]+)+
que- según creo -puede reducirse a:
Código:
[\w\-\.]+@[\w\-]+(\.[\w\-]+)+
aunque no me queda claro que los guiones estén permitidos en un email y permitiría un punto inicial que no creo que sea válido.
Haciendo algunas pruebas, me ha gustado esta:
Código:
^\w+(\.\w+)*@(\w+(\.\w+)+)$
que podría completarse a
Código:
^[\w\-]+(\.[\w\-]+)*@([\w\-]+(\.[\w\-]+)+)$
si permitimos guiones.
Aplicando a nuestro caso, podemos implementar esta función:
Código Delphi
[-]
uses
RegExpr;
function EsEmailValido(Email: String; Ping: Boolean = false);
var
RegExp: TRegExpr;
begin
RegExp := TRegExp.Create;
try
RegExp.Expression := '^\w+(\.\w+)*@(\w+(\.\w+)+)$';
Result := RegExp.Exec(Email);
if Result and Ping then
Result := GetIP(RegExp.Match[2]) <> '';
finally
RegExp.Free;
end;
end;
El parámetro
Ping sería para indicar si deseamos verificar la existencia del servidor.
// Saludos