Question

I am using this function for validating email addresses, but it doesn’t work if the email address is like this:

name@server.com. 
OR 
//name@server.com

Is there a way to develop this function?

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 && !(checkdnsrr($domain,"MX") || checkdnsrr($domain,"A")))
      {
         // domain not found in DNS
         $isValid = false;
      }
   }
   return $isValid;
}
Was it helpful?

Solution

Use filter_var(). Below is a simple use demonstration. Many other options are available.

<?php

  // You might want to trim whitespace first: 
$possibleEmailAddress = trim($possibleEmailAddress);

filter_var($possibleEmailAddress, FILTER_VALIDATE_EMAIL);

// Returns false if $possibleEmailAddress doesn't appear valid.
// Returns the email string if it does appear okay.
?>

live example

Note that //name@server.com is a valid email, but name@server.com. is not. You'd have to trim the period from the end to make it valid. You can't just use trim(), since periods at the beginning of an email could be valid and intentional.

OTHER TIPS

function  checkEmail($email) 
    {
    $patern = '/^[a-zA-Z0-9.\-_]+@[a-zA-Z0-9\-.]+\.[a-zA-Z]{2,4}$/';
    if (preg_match($patern , $email)) 
        {
        return TRUE;
        }
    else
        { 
        return FALSE;
        }
    }
}

the simplest

Or, same as Asar's but shorter:

function  checkEmail($email) {
     $patern = '/^[a-zA-Z0-9.\-_]+@[a-zA-Z0-9\-.]+\.[a-zA-Z]{2,4}$/';
     return preg_match($patern , $email);
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top