best email validator

F

Fred

I'm researching and I see various approaches, with or without regex. So I'm
asking for opinions on which is the best - that is, the most thorough. Thanks.
 
T

Thiago Macedo

I'm researching and I see various approaches, with or without regex. So I'm
asking for opinions on which is the best - that is, the most thorough. Thanks.

Unless your have AJAX as an option, I found REGEX to be the best
solution.
Ajax could be bether when you need to check if the domain and account
is valid on the mailserver.

Thiago
 
D

Dr J R Stockton

Mon said:
I'm researching and I see various approaches, with or without regex. So I'm
asking for opinions on which is the best - that is, the most thorough. Thanks.

Setting that is a useful way for a teacher to tell whether a student is
intelligent or clever or knowledgeable on the course material.

But since there is no way for JavaScript string routines to tell whether
or not Fred <[email protected]> is or will be a deliverable E-mail
address, the exercise has no practical use.

<URL:http://www.merlyn.demon.co.uk/js-balid.htm> refers.

It's a good idea to read the newsgroup c.l.j and its FAQ. See below.
 
L

Laser Lips

Setting that is a useful way for a teacher to tell whether a student is
intelligent or clever or knowledgeable on the course material.

But since there is no way for JavaScript string routines to tell whether
or not Fred <[email protected]> is or will be a deliverable E-mail
address, the exercise has no practical use.

<URL:http://www.merlyn.demon.co.uk/js-balid.htm> refers.

It's a good idea to read the newsgroup c.l.j and its FAQ. See below.

--
(c) John Stockton, nr London UK. [email protected] IE7 FF2 Op9 Sf3
FAQ <URL:http://www.jibbering.com/faq/index.html>.
<URL:http://www.merlyn.demon.co.uk/js-index.htm> jscr maths, dates, sources.
<URL:http://www.merlyn.demon.co.uk/> TP/BP/Delphi/jscr/&c, FAQ items, links.

function emailCheck(e)
{
var emailStr;
emailStr = e;
valid = true;

var checkTLD=0;
var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|
coop|info|pro|museum|uk|se)$/;
var emailPat=/^(.+)@(.+)$/;
var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
var validChars="\[^\\s" + specialChars + "\]";
var quotedUser="(\"[^\"]*\")";
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
var atom=validChars + '+';
var word="(" + atom + "|" + quotedUser + ")";
var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
var matchArray=emailStr.match(emailPat);

if (matchArray==null)
{
//alert("The email address is invalid");
valid = false;
}else
{
var user=matchArray[1];
var domain=matchArray[2];

for (i=0; i<user.length; i++)
{
if (user.charCodeAt(i)>127)
{
//alert("The username contains invalid Characters.");
valid = false;
}
}
for (i=0; i<domain.length; i++)
{
if (domain.charCodeAt(i)>127)
{
//alert("The domain dame contains invalid characters.");
valid = false;
}
}
if (user.match(userPat)==null)
{
//alert("The username is invalid.");
valid = false;
}

var IPArray=domain.match(ipDomainPat);
if (IPArray!=null)
{
for (var i=1;i<=4;i++)
{
if (IPArray>255)
{
//alert("The destination IP address is invalid.");
valid = false;
}
}

}
var atomPat=new RegExp("^" + atom + "$");
var domArr=domain.split(".");
var len=domArr.length;
for (i=0;i<len;i++)
{
if (domArr.search(atomPat)==-1)
{
//alert("The domain name is invalid.");
valid = false;
}
}
if (checkTLD && domArr[domArr.length-1].length!=2 &&
domArr[domArr.length-1].search(knownDomsPat)==-1)
{
//alert("The domain name extension is invalid");
valid = false;
}
if (len<2)
{
//alert("The address is missing a hostname.");
valid = false;
}
}
return valid;
}
 
L

Laser Lips

Setting that is a useful way for a teacher to tell whether a student is
intelligent or clever or knowledgeable on the course material.

But since there is no way for JavaScript string routines to tell whether
or not Fred <[email protected]> is or will be a deliverable E-mail
address, the exercise has no practical use.

<URL:http://www.merlyn.demon.co.uk/js-balid.htm> refers.

It's a good idea to read the newsgroup c.l.j and its FAQ. See below.

--
(c) John Stockton, nr London UK. [email protected] IE7 FF2 Op9 Sf3
FAQ <URL:http://www.jibbering.com/faq/index.html>.
<URL:http://www.merlyn.demon.co.uk/js-index.htm> jscr maths, dates, sources.
<URL:http://www.merlyn.demon.co.uk/> TP/BP/Delphi/jscr/&c, FAQ items, links.

Or, you could use PHP and do an AJEX call to the PHP script to check
the Email address.
 
L

Laser Lips

Setting that is a useful way for a teacher to tell whether a student is
intelligent or clever or knowledgeable on the course material.

But since there is no way for JavaScript string routines to tell whether
or not Fred <[email protected]> is or will be a deliverable E-mail
address, the exercise has no practical use.

<URL:http://www.merlyn.demon.co.uk/js-balid.htm> refers.

It's a good idea to read the newsgroup c.l.j and its FAQ. See below.

--
(c) John Stockton, nr London UK. [email protected] IE7 FF2 Op9 Sf3
FAQ <URL:http://www.jibbering.com/faq/index.html>.
<URL:http://www.merlyn.demon.co.uk/js-index.htm> jscr maths, dates, sources.
<URL:http://www.merlyn.demon.co.uk/> TP/BP/Delphi/jscr/&c, FAQ items, links.

AJAX not AJEX
 
D

Dr J R Stockton

In comp.lang.javascript message <cf5469cd-9131-4c85-b83f-53effaa0bad6@m4
4g2000hsc.googlegroups.com>, Mon, 25 Aug 2008 10:32:18, Thiago Macedo
Unless your have AJAX as an option, I found REGEX to be the best
solution.
Ajax could be bether when you need to check if the domain and account
is valid on the mailserver.

Outside this room, it is not possible at present to tell which merlyn E-
mail addresses, for example (e-mail address removed), are currently
valid.

World-wide, there must be millions of abandoned E-mail addresses, ones
which technically accept mail that will never be read.

The only trustworthy indication of E-address validity is to receive a
plausible reply to the content of a message sent to it; and that does
not prove continued validity.

False rejections prevent legitimate communication; there must be many
examples of "validators" in books and on the Web which insist in a 2-/3-
character final part :-(.

The only sensible test is one designed to verify that the string could
be grammatically valid, for example that there is at least one character
before an @, followed by at least one character, a dot, and at least one
character.

To do much more requires a full understanding of all applicable RFCs,
including new ones when they appear.

A well-designed system will allow such as
comment <address>
& address (comment)
though few examples are to be found.
 
B

Bart Van der Donck

Laser said:
function emailCheck(e)
{
        var emailStr;
        emailStr = e;
        valid = true;

        var checkTLD=0;
        var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|
coop|info|pro|museum|uk|se)$/;
        var emailPat=/^(.+)@(.+)$/;
        var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
        var validChars="\[^\\s" + specialChars + "\]";
        var quotedUser="(\"[^\"]*\")";
        var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
        var atom=validChars + '+';
        var word="(" + atom + "|" + quotedUser + ")";
        var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
        var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
        var matchArray=emailStr.match(emailPat);

        if (matchArray==null)
        {
                //alert("The email address is invalid");
                valid = false;
        }else
        {
                var user=matchArray[1];
                var domain=matchArray[2];

                for (i=0; i<user.length; i++)
                {
                        if (user.charCodeAt(i)>127)
                        {
                                //alert("The username contains invalid Characters.");
                                valid =false;
                        }
                }
                for (i=0; i<domain.length; i++)
                {
                        if (domain.charCodeAt(i)>127)
                        {
                                //alert("The domain dame contains invalid characters.");
                                valid =false;
                        }
                }
                if (user.match(userPat)==null)
                {
                        //alert("The username is invalid.");
                        valid = false;
                }

                var IPArray=domain.match(ipDomainPat);
                if (IPArray!=null)
                {
                        for (var i=1;i<=4;i++)
                        {
                                if (IPArray>255)
                                {
                                        //alert("The destination IP address is invalid.");
                                        valid = false;
                                }
                        }

                }
                var atomPat=new RegExp("^" + atom + "$");
                var domArr=domain.split(".");
                var len=domArr.length;
                for (i=0;i<len;i++)
                {
                        if (domArr.search(atomPat)==-1)
                        {
                                //alert("The domain name is invalid.");
                                valid =false;
                        }
                }
                if (checkTLD && domArr[domArr.length-1].length!=2 &&
domArr[domArr.length-1].search(knownDomsPat)==-1)
                {
                        //alert("The domain name extension is invalid");
                        valid = false;
                }
                if (len<2)
                {
                        //alert("The address is missing a hostname.");
                        valid = false;
                }
        }
        return valid;

}


Nice code.

I would not allow aa/[email protected], because slash is often used as
directory separator to store mail.

(e-mail address removed) is maybe RFC2822-compliant, but TLD's should consist of at
least 2 characters (I suppose you're not interested in filtering on
valid LAN-hostnames).

a@#b.com, a@b{c.com, a@$b.com, (e-mail address removed)' etc. are wrong; those signs
are not allowed in domain names.

The condition " if (myvar.charCodeAt(i)>127) { ... " is probably too
broad; lots of <127 characters are not allowed too.

Your variable 'knownDomsPat' creates confusion; the script doesn't
appear to check further on it (I wouldn't use such a lookup-array
anyhow).

A readable summary of RFC 2822:
http://en.wikipedia.org/wiki/E-mail_address#RFC_Specification

All a bit academic though. Note that Windows Hotmail only allows
alphanumerics, dot (.), underscore (_) and hyphen (-) for the full
address. In practice I would probably use such a "real-world"
criterion as well.

Hope this helps,
 
T

Thomas 'PointedEars' Lahn

Bart said:
Laser said:
function emailCheck(e) {
[...]
}

Nice code.

For fitting values of "nice".
I would not allow aa/[email protected], because slash is often used as
directory separator to store mail.

That is a non sequitur to me.

Another issue is that foo@[x.y.z.255] certainly does not specify a mailbox.
IPv6 addresses are also not supported although that would be standard
compliant. And that is likely not the end of it.
[...] Note that Windows Hotmail only allows alphanumerics, dot (.),
underscore (_) and hyphen (-) for the full address.

That is good to know, thanks.
In practice I would probably use such a "real-world" criterion as well.

As for that, I had already derived a regular expression from the addr-spec
specification of RFC2822, and posted it here a while ago, IIRC without much
debate afterwards.


PointedEars
 
L

Laser Lips

Bart said:
Laser said:
function emailCheck(e) {
[...]
}
Nice code.

For fitting values of "nice".
I would not allow (e-mail address removed), because slash is often used as
directory separator to store mail.

That is a non sequitur to me.

Another issue is that foo@[x.y.z.255] certainly does not specify a mailbox.
IPv6 addresses are also not supported although that would be standard
compliant. And that is likely not the end of it.
[...] Note that Windows Hotmail only allows alphanumerics, dot (.),
underscore (_) and hyphen (-) for the full address.

That is good to know, thanks.
In practice I would probably use such a "real-world" criterion as well.

As for that, I had already derived a regular expression from the addr-spec
specification of RFC2822, and posted it here a while ago, IIRC without much
debate afterwards.

PointedEars
--
realism: HTML 4.01 Strict
evangelism: XHTML 1.0 Strict
madness: XHTML 1.1 as application/xhtml+xml
-- Bjoern Hoehrmann

Sorry, was being lazy, I did'nt write that code, used it ages ago and
seems to do the job. Just thought it would for Freds purpose.
 
D

Dr J R Stockton

In comp.lang.javascript message <a09acfe7-0e45-452a-8900-2b207905cc76@q5
g2000prf.googlegroups.com>, Tue, 26 Aug 2008 04:50:23, Bart Van der
Donck said:
I would not allow aa/[email protected], because slash is often used as
directory separator to store mail.

My notoriously standards-compliant mailer considers it acceptable. If a
mail receiving agent allows the creation of names of that form, it must
consider any consequent problems. Turnpike won't care; it does not
store mail in that sort of way.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,141
Messages
2,570,812
Members
47,357
Latest member
sitele8746

Latest Threads

Top