Email validation using regular expression in PHP

后端 未结 11 1511
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-11-30 01:38

I am pretty much new with regular expression. I am developing a project in PHP and i need to validate email address. After searching in this site and google i found the fol

11条回答
  •  醉梦人生
    2020-11-30 02:22

    There more than one ways to check if an e-mail is valid.

    One simple way is to use this function:

    function validate($email) {
        return preg_match("/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$/", $email);    
    }
    

    It is from a code snippet found here: Basic Email Validation in PHP

    Although this implementation would work most of the time it may allow some wrong emails. The following implementation ahould be 100% accurate but is also quite complex:

    function validate($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) {
                $isValid = false;
            } else if ($domainLen < 1 || $domainLen > 255) {
                $isValid = false;
            } else if ($local[0] == '.' || $local[$localLen - 1] == '.') {
                $isValid = false;
            } else if (preg_match('/\\.\\./', $local)) {
                $isValid = false;
            } else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain)) {
                $isValid = false;
            } else if (preg_match('/\\.\\./', $domain)) {
                $isValid = false;
            } else if (!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace("\\\\", "", $local))) {
                if (!preg_match('/^"(\\\\"|[^"])+"$/', str_replace("\\\\", "", $local))) {
                    $isValid = false;
                }
            }
    
            if ($isValid && !(checkdnsrr($domain, "MX") || checkdnsrr($domain ,"A"))) {
                $isValid = false;
            }
        }
    
        return $isValid;
    }
    

    This code is from snippet found here: Strict Email Validation in PHP

    Hope this helps!

提交回复
热议问题