检查电子邮件地址中的有效域

时间:2011-11-21 11:22:23

标签: php

我有以下功能来检查电子邮件是否有效:

function validate_email ($getemail, $type)
{
    $email = $getemail;
    if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $chkdomain = explode("@", $email);
        $domain = $chkdomain[1];
        switch ($type) :
            case 1: //FOR USERS
                if ($domain == "oxfordmontessori.com" || $domain == "student.com" || $domain == "vendor.com")
                    return 'Not Valid';
                else
                    return TRUE;
        endswitch
        ;
    } else {
        return FALSE;
    }
}

我以这种方式调用函数。

var_dump($email);
$response = validate_email($email, '1');
var_dump($response);
if ($response == FALSE) {
    $error = "Incorrect Email-Id";
} elseif ($response == 'Not Valid') {
    $error = "Email domain is not valid for user.";
}
var_dump($response);

代码有以下问题

  1. 功能是对sunrise@o.com和'sunrise@o.c'这样的电子邮件验证没有多大限制,两者都被认为是有效的电子邮件ID。

  2. 如果函数返回TRUE,我也会收到“电子邮件域对用户无效。”

  3. 还有一个问题是返回TRUE时它会给我一个错误Email domain is not valid for user.

2 个答案:

答案 0 :(得分:1)

它不起作用,因为如果域名设置为oxfordmontessori.com student.comvendor.com,则返回“无效”,因此@a.com@b.com将返回true。除非您的系统旨在阻止人们使用这些特定域名。

您可能应该有一个外部变量来存储错误,或者在参数中有一个指针,而不是从函数中返回多个数据类型。可以是true或false,也可以是整数,但不是true,false和string的混合。我认为字符串(当针对布尔运算符进行检查时)每次都返回true。

答案 1 :(得分:-4)

您也可以使用html5 email inputs进行验证。 验证主要通过像

这样的正则表达式函数来完成
preg_match()

Here is an example of using regular expressions for validating email addresses