Solved

# Verify e-mail address is valid

Posted on 2001-08-03
209 Views
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
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
• 2
• 2
• 2
• +1

LVL 3

Expert Comment

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
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

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

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
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 1

Author Comment

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

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
else
end;
0

LVL 5

Accepted Solution

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
else
end;
0

LVL 1

Author Comment

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

Thanks
Paul.
0

## Featured Post

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…
###### Suggested Courses
Course of the Month2 days, 21 hours left to enroll