Jump to content

[SOLVED] Validating email address?


galvin

Recommended Posts

I got this function online to validate an email address and I'm having trouble.  All the code is below but when I actually try to check to see if the function validEmail returns $isValid as true or false, I am getting false always (even when I enter perfectly good email addresses).

 

This is how I am calling the function and checking to see if $isValid is true or false.  My guess is that Im doing something stupid here.  My form has an email field with name 'email' so that is what I'm checking below obviously.  I keep getting "Email address is not valid"....

 

	validEmail($_POST['email']);

if (!$isValid) {
$bademail = "Email Address is not valid";
} else  ($isValid) {
$bademail = "email is fine";
} 	

 

 

This is the actual validEmail function I got online...

 


/**
Validate an email address.
Provide email address (raw input)
Returns true if the email address has the email 
address format and the domain exists.
*/
function validEmail($email)
{
   $isValid = true;
   $atIndex = strrpos($email, "@");
   if (is_bool($atIndex) && !$atIndex)
   {
      $isValid = false;
   }
   else
   {
      $domain = substr($email, $atIndex+1);
      $local = substr($email, 0, $atIndex);
      $localLen = strlen($local);
      $domainLen = strlen($domain);
      if ($localLen < 1 || $localLen > 64)
      {
         // local part length exceeded
         $isValid = false;
      }
      else if ($domainLen < 1 || $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)))
      {
         // character not valid in local part unless 
         // local part is quoted
         if (!preg_match('/^"(\\\\"|[^"])+"$/',
             str_replace("\\\\","",$local)))
         {
            $isValid = false;
         }
      }
if ($isValid && !(myCheckDNSRR($domain,"MX") || myCheckDNSRR($domain,"A")))
      {
         // domain not found in DNS
         $isValid = false;
      }
   }
   return $isValid;
}


function myCheckDNSRR($hostName, $recType = '')
{
if(!empty($hostName)) {
if( $recType == '' ) $recType = "MX";
exec("nslookup -type=$recType $hostName", $result);
// check each line to find the one that starts with the host
// name. If it exists then the function succeeded.
foreach ($result as $line) {
if(eregi("^$hostName",$line)) {
return true;
}
}
// otherwise there was no mail handler for the domain
return false;
}
return false;
}

Link to comment
https://forums.phpfreaks.com/topic/162087-solved-validating-email-address/
Share on other sites

$isValid does not exist outside of the function.

 

Either do....

 

$isValid = validEmail($_POST['email']);

if (!$isValid) {
  $bademail = "Email Address is not valid";
} else {
   $bademail = "email is fine";
}

echo $bademail;

 

or the more common....

 

if (validEmail($_POST['email'])) {
  echo "Email Address is not valid";
} else {
  echo "email is fine";
}

  • 3 weeks later...

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.