JavaScript: Validate an email address. (advanced)

Posted October 2nd, 2010


The following JavaScript will validate an email address using strict rules when a form is submitted.

...
 
<head>
 
...
 
<script language="JavaScript" type="text/javascript">
function emailCheck(emailStr) {
     var checkTLD=1;
     var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
     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("You must supply a valid email address.");
          return false;
     }
     var user=matchArray[1];
     var domain=matchArray[2];
     for (i=0; i<user.length; i++) {
         if (user.charCodeAt(i)>127) {
             alert("The supplied email user name contains invalid characters.");
         return false;
         }
     }
     for (i=0; i<domain.length; i++) {
        if (domain.charCodeAt(i)>127) {
            alert("The supplied email domain contains invalid characters.");
            return false;
        }
     }
     if (user.match(userPat)==null) {
         alert("The supplied email address contains invalid characters.");
         return false;
     }
     var IPArray=domain.match(ipDomainPat);
         if (IPArray!=null) {
             for (var i=1;i<=4;i++) {
                 if (IPArray[i]>255) {
                 alert("The supplied email IP address is invalid.");
                 return false;
             }
         }
         return true;
     }
     var atomPat=new RegExp("^" + atom + "$");
     var domArr=domain.split(".");
     var len=domArr.length;
     for (i=0;i<len;i++) {
         if (domArr[i].search(atomPat)==-1) {
             alert("The domain name does not seem to be valid.");
             return false;
        }
     }
     if (checkTLD && domArr[domArr.length-1].length!=2 &&
         domArr[domArr.length-1].search(knownDomsPat)==-1) {
         alert("The supplied email address must end in a well known domain or two letter " + "country code.");
         return false;
     }
     if (len<2) {
         alert("The supplied email address is missing a hostname.");
         return false;
     }
     return true;
}
</script>
 
...
 
</head>
<body>
 
...
 
<form id="form1" name="form1" method="post" onSubmit="return emailCheck(this.email.value)" action="">
 
...