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;
  }
?>

Return to the Artful MySQL Tips page