Проверка правильности E-mail адреса

Материал из DRKB


Если пользователю Вашего приложения необходимо вводить почтовый адрес, то возникает потребность в проверке адреса на правильность. Конечно способов сделать это существует множество, но этот, на мой взгляд, самый короткий и доступный для понимания.

Совместимость: Delphi 3.x (или выше)

function IsValidEmail(const Value: string): Boolean;

  function CheckAllowed(const s: string): Boolean;
  var
    i: Integer;
  begin
    Result := False;
    for i := 1 to Length(s) do
    begin
      { недопустимый символ в s - значит недопустимый адрес }
      if not (s[i] in ['a'..'z', 'A'..'Z', '0'..'9', '_', '-', '.']) then
        Exit;
    end;
    Result := True;
  end;

var
  i: Integer;
  namePart, serverPart: string;
begin
  // начало выполнения IsValidEmail
  Result := False;
  i := Pos('@', Value);
  if i = 0 then
    Exit;
  namePart := Copy(Value, 1, i - 1);
  serverPart := Copy(Value, i + 1, Length(Value));
  // @ не указано имя или сервер не указаны; минимально для сервера. "a.com"
  if (Length(namePart) = 0) or ((Length(serverPart) < 1)) then
    Exit;
  i := Pos('.', serverPart);
  // должно иметь точку и как минимум два знака от конца
  if (i = 0) or (i > (Length(serverPart) - 1)) then
    Exit;
  Result := CheckAllowed(namePart) and CheckAllowed(serverPart);
end;


Author: Udo Nesshoever
Source: http://forum.sources.ru
ID: 03407