Solved

Verify e-mail address is valid

Posted on 2001-08-03
7
205 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
  • 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
Gigs: Get Your Project Delivered by an Expert

Select from freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely and get projects done right.

 
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

Courses: Start Training Online With Pros, Today

Brush up on the basics or master the advanced techniques required to earn essential industry certifications, with Courses. Enroll in a course and start learning today. Training topics range from Android App Dev to the Xen Virtualization Platform.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Copy file in dll not working but working on exe ! 18 92
build html 5 client that connect to indy Tidtcpserver 3 395
delphi prevent click fast 2 214
Best Firemonkey component pack 1 101
In this tutorial I will show you how to use the Windows Speech API in Delphi. I will only cover basic functions such as text to speech and controlling the speed of the speech. SAPI Installation First you need to install the SAPI type library, th…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
This Micro Tutorial hows how you can integrate  Mac OSX to a Windows Active Directory Domain. Apple has made it easy to allow users to bind their macs to a windows domain with relative ease. The following video show how to bind OSX Mavericks to …
Windows 10 is mostly good. However the one thing that annoys me is how many clicks you have to do to dial a VPN connection. You have to go to settings from the start menu, (2 clicks), Network and Internet (1 click), Click VPN (another click) then fi…

786 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