Tema: ejercicio
Ver Mensaje Individual
  #16  
Antiguo 27-03-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Reputación: 22
keyboy Va por buen camino
A ver que les parece esta otra aproximación

Código Delphi [-]
function ValidEMail(EMail: String): Boolean;
var
  Parts: TStrings;
  Usuario, Servidor: String;
  I: Integer;

begin
  // Seamos pesimistas
  Result := false;

  // Quitamos espacios a los lados, que si bien son incorrectos, no estorban
  EMail := Trim(EMail);

  // Pero no permitamos espacios intermedios
  if Pos(' ', EMail) <> 0 then
    exit;

  Parts := TStringList.Create;

  try
    // Partamos la cadena tomando la @ como delimitador
    Parts.Delimiter := '@';
    Parts.DelimitedText := EMail;

    // Debe haber dos y sólo dos partes...
    if Parts.Count <> 2 then
      exit;

    Usuario := Parts[0];
    Servidor := Parts[1];

    // ...y ninguna puede estar vacía
    if (Usuario = '') or (Servidor = '') then
      exit;

    // Ahora separemos la parte servidor tomando el . como delimitador
    Parts.Delimiter := '.';
    Parts.DelimitedText := Servidor;

    // Debe haber al menos dos partes...
    if Parts.Count < 2 then
      exit;

    // ...pero ninguna vacía
    for I := 0 to Pred(Parts.Count) do
      if Parts[i] = '' then
        exit;

    Result := true;
  finally
    Parts.Free;
  end;
end;

Como digo, es sólo una aproximación así que no pretende hacer más que esto:

1. Determinar que existe una y sólo una @
2. Que hay algo antes (usuario) y después (servidor) de esa @
3. Que después de la @ hay por lo menos dos partes separadas por puntos
4. Que ninguna de esas partes está vacía.

Esto es, se permiten cosas como

[email protected]

pero no

usuario@servidor
@servidor.com
usuario@@servidor.com
[email protected]
etc.

No valido el punto en la parte de usuario porque, al menos yo, tengo direcciones de correo de la forma

[email protected]

Bye

Última edición por keyboy fecha: 27-03-2008 a las 02:57:30.
Responder Con Cita