• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 221
  • Last Modified:

Verify e-mail address is valid

How do I verify an e-mail address typed by a user into an edit box is valid ?. i.e. of the correct format name@xxxxx.xxx

Thanks
Paul.
0
pr_wainwright
Asked:
pr_wainwright
  • 2
  • 2
  • 2
  • +1
1 Solution
 
VSFCommented:
I will try to come up with a e-mail verification funtion and will let you know!VSF
www.victory.hpg.com.br

This is not exactly what you need but I think it can help

function VerifyURL(S: string): Boolean;
const
BADCHARS = ';*<>{}[]|\()^!';
var
p, x, c, count, i: Integer;
begin
Result := False;
if (Length(S) > 5) and (S[Length(S)] <> '.') and (Pos(S, '..') = 0) then
   begin
   for i := Length(BADCHARS) downto 1 do
       begin
       if Pos(BADCHARS[i], S) > 0 then
          begin
          exit;
          end;
       end;
   for i := 1 to Length(S) do
       begin
       if (Ord(S[i]) < 33) or (Ord(S[i]) > 126) then
          begin
          exit;
          end;
       end;
   if ((Pos('www.',LowerCase(S)) = 1) and (Pos('.', Copy(S, 5, Length(s))) > 0) and (Length(S) > 7)) or ((Pos('news:', LowerCase(S)) = 1) and (Length(S) > 7) and (Pos('.', Copy(S, 5, Length(S))) > 0)) then
       begin
       end
   else if ((Pos('mailto:', LowerCase(S)) = 1) and (Length(S) > 12) and (Pos('@', S) > 8) and (Pos('.', S) > 10) and (Pos('.', S) > (Pos('@', S) +1))) or ((Length(S) > 6) and (Pos('@', S) > 1) and (Pos('.', S) > 4) and (Pos('.', S) > (Pos('@', S) +1))) then
            begin
            Result := True;
            Exit;
            end
   else if ((Pos('http://', LowerCase(S)) = 1) and (Length(S) > 10) and (Pos('.', S) > 8)) or ((Pos('ftp://', LowerCase(S)) = 1) and (Length(S) > 9) and (Pos('.', S) > 7)) then
           begin
           Result := True;
           Exit;
           end
        else
           begin
           Result := True;
           end;
   for Count := 1 to 4 do
       begin
       p := Pos('.',S) - 1;
       if p < 0 then
          begin
          p := Length(S);
          end;
        Val(Copy(S, 1, p), x, c);
        if ((c <> 0) or (x < 0) or (x > 255) or (p>3)) then
           begin
           Result := False;
           Break;
           end;
        Delete(S, 1, p + 1);
        end;
   if (S <> '') then
       begin
       Result := False;
       end;
   end;
end;
0
 
MannSoftCommented:
A quick and dirty one I use is:

if (Pos('@', Edit1.Text) = 0) or (Pos('.', Edit1.Text) = 0) then ShowMessage('Invalid E-Mail Address');
0
 
VSFCommented:
I will try to come up with a e-mail verification funtion and will let you know!VSF
www.victory.hpg.com.br

This is not exactly what you need but I think it can help

function VerifyURL(S: string): Boolean;
const
BADCHARS = ';*<>{}[]|\()^!';
var
p, x, c, count, i: Integer;
begin
Result := False;
if (Length(S) > 5) and (S[Length(S)] <> '.') and (Pos(S, '..') = 0) then
   begin
   for i := Length(BADCHARS) downto 1 do
       begin
       if Pos(BADCHARS[i], S) > 0 then
          begin
          exit;
          end;
       end;
   for i := 1 to Length(S) do
       begin
       if (Ord(S[i]) < 33) or (Ord(S[i]) > 126) then
          begin
          exit;
          end;
       end;
   if ((Pos('www.',LowerCase(S)) = 1) and (Pos('.', Copy(S, 5, Length(s))) > 0) and (Length(S) > 7)) or ((Pos('news:', LowerCase(S)) = 1) and (Length(S) > 7) and (Pos('.', Copy(S, 5, Length(S))) > 0)) then
       begin
       end
   else if ((Pos('mailto:', LowerCase(S)) = 1) and (Length(S) > 12) and (Pos('@', S) > 8) and (Pos('.', S) > 10) and (Pos('.', S) > (Pos('@', S) +1))) or ((Length(S) > 6) and (Pos('@', S) > 1) and (Pos('.', S) > 4) and (Pos('.', S) > (Pos('@', S) +1))) then
            begin
            Result := True;
            Exit;
            end
   else if ((Pos('http://', LowerCase(S)) = 1) and (Length(S) > 10) and (Pos('.', S) > 8)) or ((Pos('ftp://', LowerCase(S)) = 1) and (Length(S) > 9) and (Pos('.', S) > 7)) then
           begin
           Result := True;
           Exit;
           end
        else
           begin
           Result := True;
           end;
   for Count := 1 to 4 do
       begin
       p := Pos('.',S) - 1;
       if p < 0 then
          begin
          p := Length(S);
          end;
        Val(Copy(S, 1, p), x, c);
        if ((c <> 0) or (x < 0) or (x > 255) or (p>3)) then
           begin
           Result := False;
           Break;
           end;
        Delete(S, 1, p + 1);
        end;
   if (S <> '') then
       begin
       Result := False;
       end;
   end;
end;
0
Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
pr_wainwrightAuthor Commented:
VSF,
    Your function works fine for most email addresses but my company's email format is 'paul.wainwright@unilever.com' which is invalid. The first '.' makes the email invalid. How would i modify the code to accept this format ?. I have tried but can't get it to work properly !.

Thanks
Paul.
0
 
alanwhincupCommented:
You could try something like this:

function IsEmailAddressInvalid(const S : string) : Boolean;   // Returns True if Email Addy is Invalid
var
  I : Integer;
  Temp : string;
begin
  Result := (Trim(S) = '') or
            (Pos(' ', AnsiLowerCase(S)) > 0) or
            (Pos('a', AnsiLowerCase(S)) > 0) or
            (Pos('o', AnsiLowerCase(s)) > 0) or
            (Pos('u', AnsiLowerCase(S)) > 0) or
            (Pos('?', AnsiLowerCase(S)) > 0) or
            (Pos('[', AnsiLowerCase(S)) > 0) or
            (Pos(']', AnsiLowerCase(S)) > 0) or
            (Pos('(', AnsiLowerCase(S)) > 0) or
            (Pos(')', AnsiLowerCase(S)) > 0) or
            (Pos(':', AnsiLowerCase(S)) > 0);
  if Result then
    Exit;
  I := Pos('@', S);
  Result := (I = 0) or (I = 1) or (I = Length(S));
  if Result then
    Exit;
  Result := (Pos('@', Copy(S, I + 1, Length(S) - 1)) > 0);
  if Result then
    Exit;
  Temp := Copy(S, I + 1, Length(S));
  Result := Length(Temp) <= 1;
  if Result then
    Exit;
  I := Pos('.', Temp);
  Result := (I = 0) or (I = 1) or (I = Length(Temp));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsEmailAddressInvalid('paul.wainwright@unilever.com') then
    ShowMessage('Email Address is Invalid.')
  else
    ShowMessage('Email Address is valid.');
end;
0
 
alanwhincupCommented:
The above example was slightly wrong (Some chars didnt post correctly):

function IsEmailAddressInvalid(const S : string) : Boolean;   // Returns True if Email Addy is Invalid
var
  I : Integer;
  Temp : string;
begin
  Result := (Trim(S) = '') or
            (Pos(' ', AnsiLowerCase(S)) > 0) or
            (Pos(Chr(228), AnsiLowerCase(S)) > 0) or
            (Pos(Chr(246), AnsiLowerCase(s)) > 0) or
            (Pos(Chr(252), AnsiLowerCase(S)) > 0) or
            (Pos(Chr(223), AnsiLowerCase(S)) > 0) or
            (Pos('[', AnsiLowerCase(S)) > 0) or
            (Pos(']', AnsiLowerCase(S)) > 0) or
            (Pos('(', AnsiLowerCase(S)) > 0) or
            (Pos(')', AnsiLowerCase(S)) > 0) or
            (Pos(';', AnsiLowerCase(S)) > 0) or
            (Pos('*', AnsiLowerCase(S)) > 0) or
            (Pos('<', AnsiLowerCase(S)) > 0) or
            (Pos('>', AnsiLowerCase(S)) > 0) or
            (Pos('{', AnsiLowerCase(S)) > 0) or
            (Pos('}', AnsiLowerCase(S)) > 0) or
            (Pos('\', AnsiLowerCase(S)) > 0) or
            (Pos('^', AnsiLowerCase(S)) > 0) or
            (Pos('!', AnsiLowerCase(S)) > 0) or
            (Pos(':', AnsiLowerCase(S)) > 0);
  if Result then
    Exit;
  I := Pos('@', S);
  Result := (I = 0) or (I = 1) or (I = Length(S));
  if Result then
    Exit;
  Result := (Pos('@', Copy(S, I + 1, Length(S) - 1)) > 0);
  if Result then
    Exit;
  Temp := Copy(S, I + 1, Length(S));
  Result := Length(Temp) <= 1;
  if Result then
    Exit;
  I := Pos('.', Temp);
  Result := (I = 0) or (I = 1) or (I = Length(Temp));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsEmailAddressInvalid('paul.wainwright@unilever.com') then
    ShowMessage('Email Address is Invalid.')
  else
    ShowMessage('Email Address is valid.');
end;
0
 
pr_wainwrightAuthor Commented:
Alan,
     Your function is exactly what i require.

Thanks
Paul.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 2
  • 2
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now