Search code examples
email-validation

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."

Solution

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