Girish Kumar Sinha
Girish Kumar Sinha

Reputation: 832

php email validation not working properly with regular expression

    Hello friends,

    I have a problem regarding email validation.

    Here is my code:-
    <?php
    $email='abc@test.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.ab.cd.ef.gh.ij.kl';

    $normal = "^[a-z0-9_\+-]+(\.[a-z0-9_\+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,4})$"; 
    $validButRare = "^[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+(\.[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,})$"; 

    if (eregi($normal, $email)) {
      echo("The address $email is valid and looks normal.");
    }

    else if (eregi($validButRare, $email)) {
      echo("The address $email looks a bit strange but it is syntactically valid. You might want to check it for typos.");
    }

    else {
      echo("The address $email is not valid.");
    }           
    ?>

    problem is this that it is showing above mail id as valid email id.
    and the output is:
    "The address abc@test.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.ab.cd.ef.gh.ij.kl is valid and looks normal."

Upvotes: 1

Views: 132

Answers (2)

Girish Kumar Sinha
Girish Kumar Sinha

Reputation: 832

The better way to check existence of the domain name.
If domain name exist then email is valid otherwise email is invalid.

<?php
if(domain_exists('[email protected]')) {
    echo('This email can be accepted as valid.');
}
else {
    echo('Domain name doesnot exists;  Invalid email.');
}

function domain_exists($email, $record = 'MX'){
    list($user, $domain) = explode('@', $email);
    return checkdnsrr($domain, $record);
}
?>

Upvotes: 1

Alex Kapustin
Alex Kapustin

Reputation: 2459

Try this:

$email = 'abc@test.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.co.in.ab.cd.ef.gh.ij.kl';
var_dump(filter_var($email, FILTER_VALIDATE_EMAIL) !== false);

Upvotes: 1

Related Questions