Solved

Verify e-mail address is valid

Posted on 2001-08-03
7
209 Views
Last Modified: 2010-04-06
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
Comment
Question by:pr_wainwright
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
  • 2
  • +1
7 Comments
 
LVL 3

Expert Comment

by:VSF
ID: 6350136
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
 
LVL 6

Expert Comment

by:MannSoft
ID: 6350149
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
 
LVL 3

Expert Comment

by:VSF
ID: 6350169
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
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 1

Author Comment

by:pr_wainwright
ID: 6350814
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
 
LVL 5

Expert Comment

by:alanwhincup
ID: 6351568
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
 
LVL 5

Accepted Solution

by:
alanwhincup earned 50 total points
ID: 6351577
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
 
LVL 1

Author Comment

by:pr_wainwright
ID: 6351878
Alan,
     Your function is exactly what i require.

Thanks
Paul.
0

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.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The uses clause is one of those things that just tends to grow and grow. Most of the time this is in the main form, as it's from this form that all others are called. If you have a big application (including many forms), the uses clause in the in…
Introduction Raise your hands if you were as upset with FireMonkey as I was when I discovered that there was no TListview.  I use TListView in almost all of my applications I've written, and I was not going to compromise by resorting to TStringGrid…
There's a multitude of different network monitoring solutions out there, and you're probably wondering what makes NetCrunch so special. It's completely agentless, but does let you create an agent, if you desire. It offers powerful scalability …
If you’ve ever visited a web page and noticed a cool font that you really liked the look of, but couldn’t figure out which font it was so that you could use it for your own work, then this video is for you! In this Micro Tutorial, you'll learn yo…

695 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question