Validate email address input

from the Artful MySQL Tips List



<?php

  
function emailvalidate$email ) {

    
$isValid true;

    
$atIndex strrpos($email"@");

    if (
is_bool($atIndex) && !$atIndex) {

      
$isValid false;

    }

    else {

      
$domain substr($email$atIndex+1);

      
$local substr($email0$atIndex);

      
$localLen strlen($local);

      
$domainLen strlen($domain);

      if (
$localLen || $localLen 64) {

        
// local part length exceeded

        
$isValid false;

      }

      else if (
$domainLen || $domainLen 255) {

        
// domain part length exceeded

        
$isValid false;

      }

      else if (
$local[0] == '.' || $local[$localLen-1] == '.') {

        
// local part starts or ends with '.'

        
$isValid false;

      }

      else if (
preg_match('/\\.\\./'$local)) {

        
// local part has two consecutive dots

        
$isValid false;

      }

      else if (!
preg_match('/^[A-Za-z0-9\\-\\.]+$/'$domain)) {

        
// character not valid in domain part

        
$isValid false;

      }

      else if (
preg_match('/\\.\\./'$domain)) {

        
// domain part has two consecutive dots

        
$isValid false;

      }

      else if ( !
preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/'

                            
str_replace("\\\\","",$local))

              ) {

        
// char not valid in local part unless local part is quoted

        
if (!preg_match('/^"(\\\\"|[^"])+"$/'str_replace("\\\\"""$local))) {

          
$isValid false;

        }

      }

      if( 
$isValid && !(checkdnsrr($domain,"MX") || checkdnsrr($domain"A"))) {

        
// domain not found in DNS

        
$isValid false;

      }

    }

    return 
$isValid;

  }

?>

Last updated 11 Dec 2012


Return to the Artful MySQL Tips page