?
Solved

Verify E-Mail Address Format

Posted on 2000-03-02
11
Medium Priority
?
504 Views
Last Modified: 2010-09-23
I have seen PERL script code that verifies the correctness of an e-mail address format.  Not specifically that the address is a fully valid address (someone on the other end) but simply that it has the exact correct format for an e-mail address.

I was wondering if anyone has DELPHI code to do such a thing?

Jim
0
Comment
Question by:JimboKern69
  • 2
  • 2
  • 2
  • +5
11 Comments
 

Expert Comment

by:WildMan
ID: 2577898
Try

Verified := Pos('@', EmailAddress)<>0);

Hope this help.

0
 
LVL 6

Expert Comment

by:edey
ID: 2577901
var
 email : string;
 dummy : integer;
 valid : boolean;
....
 dummy := pos('@',email);
 if (pos('.',email)>dummy+1)and(dummy > 1)then
   valid := true
 else
     valid := false;



GL
Mike
0
 
LVL 3

Expert Comment

by:Alisher_N
ID: 2577936
edey, what about john.smith@mycompany.com ?

there is also another (rare) notation like alisher!bcc.com.uz!alisher
there are also local users at server, for example my email alisher@bcc.com.uz and my friend has friend@bcc.com.uz
in this case I can send him an Email using just 'friend'
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 

Author Comment

by:JimboKern69
ID: 2577970
Let me try to stear this in the right direction...

I want something that does more than simply search for an '@' symbol in the string.  What if there are 2 '@'s?  Other conditions...anyway...

Here is the PERL script code that I would like "translated" if possible.

     
     --------------------------------------------------
     if($FORM{'email'}) {
       $FORM{'email'} =~ s/ //g;
       if($FORM{'email'} =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/ ||
     $FORM{'email'} !~
     /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/)
     {&InvalidEmailAddress};
     }
     --------------------------------------------------
     
     Note: (In this case, "$FORM{'email'}" is the email address that the
     user inputs, and "InvalidEmailAddress" is the subroutine that you
     would jump to if the email address is invalid).
0
 
LVL 6

Expert Comment

by:edey
ID: 2578005
1)alisher - yes you're def. right.  there are many more formats then validated by my code, though it gave an example of how to go about checking a string for certain content.

2)jimbo - the above perl code clearly demonstrates why it (perl) is a &remarkably* powerfull language for string manipulation, essentialy what it does is check a string against, let's see, about 200 wild carded sequences using (of course) wild cards, sets, alpha/numerical values & punctuation.  This would require a *massive* case statement in delphi.


GL
Mike
0
 
LVL 6

Expert Comment

by:DrDelphi
ID: 2578886
I'd try a different tack. In this function I check a few common email address characteristics and increment the possibly of a valid address accordingly. this way you can decide that if the function returns at least a value of x, you have a probable email address.


Function TForm1.IsValidEmail(addr:string):integer;
var teststring:string;
    ProbableGood:integer;
begin
   Teststring:=addr;
   ProbableGood:=0;
   if Pos('@',testString)>0) then inc(ProbableGood);
   IF (TestString[length(testString)-3]='.') then inc (ProbableGood);

result:=ProbableGood;
end;




Good luck!!
0
 
LVL 6

Expert Comment

by:DrDelphi
ID: 2578920
Enpanded this a little to look at domains as well...




var teststring:string;
    ProbableGood:integer;
    Domain:string;
begin
   Teststring:=addr;
   ProbableGood:=0;
   if Pos('@',testString)>0 then inc(ProbableGood);
   IF (TestString[length(testString)-3]='.') then inc (ProbableGood);
   Domain:=Copy(Teststring,Pos('.',TestString),4);
   if Uppercase(domain)='.COM' then inc(ProbableGood);
   if Uppercase(domain)='.EDU' then inc(ProbableGood);
   if Uppercase(domain)='.NET' then inc(ProbableGood);
   if Uppercase(domain)='.ORG' then inc(ProbableGood);
   if Uppercase(domain)='.GOV' then inc(ProbableGood);
result:=ProbableGood;
0
 
LVL 10

Expert Comment

by:Lischke
ID: 2579323
Hi all,

what about using the same power in Delphi as Perl offers :-)? I'm just finishing my (freeware) Unicode unit which contains a regular expression search engine. I know of at least two other libraries which offer regular expression search as well (search for RegEx on the usual Delphi servers). So, Jimbo, use REs to compare a given eMail address with the form you gave above.

Ciao, Mike
0
 

Accepted Solution

by:
JimLane earned 400 total points
ID: 2598001
Jimbo,

According to your Perl code, here's what the "rules" are for deciding whether or not an email address is in a valid format:

AN EMAIL ADDRESS MUST NOT HAVE:
1) Two @ characters in a row (@@)
2) Two periods in a row (..)
3) An @ followed by a period (@.)
4) A period followed by an @ (.@)
5) It cannot end in a period (.)

AN EMAIL ADDRESS MUST HAVE:
1) Before the @ character, it can have ANYTHING (except for any of the above).
2) After the @ character, and up to the FINAL period (.), it can have any of the following:
A-Z, a-z, 0-9, a dash "-", or a period "."
3) After the final period (.) and until the end of the address, it can be 2 or 3 characters long if ALL those characters are in the range A-Z or a-z, or 1, 2 or 3 characters long if they are ALL numerics (0-9).

Here's some code that shows how to do exactly what your Perl code is doing:

var Address: String;
begin
  Address := 'test@test.com';

  //This will remove any spaces
  while Pos(' ', Address) > 0 do
  Delete(Address, Pos(' ', Address), 1);

  If VerifyEmail(Address) = TRUE Then
  ShowMessage('Valid Email Address')
  else
  ShowMessage('Invalid Email Address');
end;


function VerifyEmail(Email: String):Boolean;
var a, b: String;
begin
  VerifyEmail := TRUE;
  a := '';
  b := '';

  If Pos('@', Email) = 0 Then
  begin
    VerifyEmail := FALSE;
    exit;
  end;

  If Pos('@', Copy(Email, Pos('@', Email) + 1, Length(Email))) <> 0 Then
  begin
    VerifyEmail := FALSE;
    exit;
  end;

  If Pos('.', Email) = 0 Then
  begin
    VerifyEmail := FALSE;
    exit;
  end;

  If Pos('..', Email) <> 0 Then
  begin
    VerifyEmail := FALSE;
    exit;
  end;

  If Pos('@.', Email) <> 0 Then
  begin
    VerifyEmail := FALSE;
    exit;
  end;

  If Pos('.@', Email) <> 0 Then
  begin
    VerifyEmail := FALSE;
    exit;
  end;

  If Copy(Email, Length(Email), 1) = '.' Then
  begin
    VerifyEmail := FALSE;
    exit;
  end;

  a := Copy(Email, Pos('@', Email) + 1, Length(Email));

  If Pos('.', a) = 0 Then
  begin
    VerifyEmail := FALSE;
    exit;
  end;

  Repeat
  b := Copy(a, Length(a), 1) + b;
  a := Copy(a, 1, Length(a) - 1);
  Until Copy(a, Length(a), 1) = '.';
  a := Copy(a, 1, Length(a) - 1);

  Repeat
  If ((a[1] < 'A') or (a[1] > 'z') or ((a[1] >= '[') and (a[1] <= '`'))) and not ((a[1] >= '0') and (a[1] <= '9')) and not (a[1] = '-') and not (a[1] = '.') Then
  begin
    VerifyEmail := FALSE;
    exit;
  end;
  a := Copy(a, 2, Length(a));
  Until a = '';

  If (Length(b) < 1) or (Length(b) > 3) Then
  begin
    VerifyEmail := FALSE;
    exit;
  end;

  If Length(b) = 1 Then
  begin
    If (b < '0') or (b > '9') Then
    begin
      VerifyEmail := FALSE;
      exit;
    end;
  end;

  If Length(b) = 2 Then
  begin
    If (b[1] >= '0') and (b[1] <= '9') Then
    begin
      If (b[2] < '0') or (b[2] > '9') Then
      begin
        VerifyEmail := FALSE;
        exit;
      end;
    end
    else
    begin
      If (b[2] >= '0') and (b[2] <= '9') Then
      begin
        VerifyEmail := FALSE;
        exit;
      end;
    end;
  end;

  If Length(b) = 3 Then
  begin
    If (b[1] >= '0') and (b[1] <= '9') Then
    begin
      If (b[2] < '0') or (b[2] > '9')or (b[3] < '0') or (b[3] > '9') Then
      begin
        VerifyEmail := FALSE;
        exit;
      end;
    end
    else
    begin
      If ((b[2] >= '0') and (b[2] <= '9')) or ((b[3] >= '0') and (b[3] <= '9')) Then
      begin
        VerifyEmail := FALSE;
        exit;
      end;
    end;
  end;

  Repeat
  If ((b[1] < 'A') or (b[1] > 'z') or ((b[1] >= '[') and (b[1] <= '`'))) and not ((b[1] >= '0') and (b[1] <= '9')) Then
  begin
    VerifyEmail := FALSE;
    exit;
  end;
  b := Copy(b, 2, Length(b));
  Until b = '';
end;
0
 

Author Comment

by:JimboKern69
ID: 2598101
JimLane,

That was AWESOME!  Copy - Paste - Compile - WORKS!

Thanks so much!

Jimbo
0
 

Expert Comment

by:Stef Merlijn
ID: 33749279
It doesn't check how many characters are in front of the @
Does this mean an emailaddress can start with a @?
0

Featured Post

Technology Partners: 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!

Question has a verified solution.

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

Objective: - This article will help user in how to convert their numeric value become words. How to use 1. You can copy this code in your Unit as function 2. than you can perform your function by type this code The Code   (CODE) The Im…
Have you ever had your Delphi form/application just hanging while waiting for data to load? This is the article to read if you want to learn some things about adding threads for data loading in the background. First, I'll setup a general applica…
Whether it be Exchange Server Crash Issues, Dirty Shutdown Errors or Failed to mount error, Stellar Phoenix Mailbox Exchange Recovery has always got your back. With the help of its easy to understand user interface and 3 simple steps recovery proced…
How can you see what you are working on when you want to see it while you to save a copy? Add a "Save As" icon to the Quick Access Toolbar, or QAT. That way, when you save a copy of a query, form, report, or other object you are modifying, you…
Suggested Courses
Course of the Month12 days, 19 hours left to enroll

579 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