最佳的电子邮件验证功能一般和具体(大学域名)?

时间:2011-06-03 21:25:55

标签: php email-validation

嘿伙计们,我知道电子邮件验证是其中一个不是块上最有趣的东西。我正在建立一个网站,我想限制我的观众只限于我大学的人,我也希望为我的用户提供首选的电子邮件地址。所以这是一个两部分问题。

  1. 是否有真正可靠的PHP功能进行电子邮件验证?

  2. 我可以验证来自特定域的电子邮件吗?我不想只检查域名是否存在,因为我知道www.mycollege.edu已经存在。真的无论如何都要验证用户是否拥有有效的@ mycollege.edu网址?谢谢!

7 个答案:

答案 0 :(得分:24)

这就是我使用的:

   function check_email_address($email) {
        // First, we check that there's one @ symbol, and that the lengths are right
        if (!preg_match("/^[^@]{1,64}@[^@]{1,255}$/", $email)) {
            // Email invalid because wrong number of characters in one section, or wrong number of @ symbols.
            return false;
        }
        // Split it into sections to make life easier
        $email_array = explode("@", $email);
        $local_array = explode(".", $email_array[0]);
        for ($i = 0; $i < sizeof($local_array); $i++) {
            if (!preg_match("/^(([A-Za-z0-9!#$%&'*+\/=?^_`{|}~-][A-Za-z0-9!#$%&'*+\/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$/", $local_array[$i])) {
                return false;
            }
        }
        if (!preg_match("/^\[?[0-9\.]+\]?$/", $email_array[1])) { // Check if domain is IP. If not, it should be valid domain name
            $domain_array = explode(".", $email_array[1]);
            if (sizeof($domain_array) < 2) {
                return false; // Not enough parts to domain
            }
            for ($i = 0; $i < sizeof($domain_array); $i++) {
                if (!preg_match("/^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$/", $domain_array[$i])) {
                    return false;
                }
            }
        }

        return true;
    }

编辑使用preg_match替换折旧的ereg,以符合PHP 5.3的要求

答案 1 :(得分:2)

如果您确实要确保其有效,请将您的注册表格发送给他们一封带有URL链接的电子邮件,他们必须点击进行验证。

这样您不仅知道地址有效(因为收到了电子邮件),而且您还知道该帐户的所有者已注册(除非其他人知道他的登录详细信息)。

为了确保它正确结束,您可以在'@'上使用explode()并检查第二部分。

$arr = explode('@', $email_address);
if ($arr[1] == 'mycollege.edu')
{
    // Then it's from your college
}

PHP还有自己使用filter_var验证电子邮件地址的方法:http://www.w3schools.com/php/filter_validate_email.asp

答案 2 :(得分:0)

这应该有效:

if (preg_match('/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])@mycollege.edu$/', $email)) {
     // Valid
}

答案 3 :(得分:0)

请阅读此处 http://ru2.php.net/manual/en/book.filter.php

或简而言之

var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL));

答案 4 :(得分:0)

任何电子邮件

([a-zA-Z0-9_-]+)(\@)([a-zA-Z0-9_-]+)(\.)([a-zA-Z0-9]{2,4})(\.[a-zA-Z0-9]{2,4})?

for php preg_match function

/([a-zA-Z0-9_-]+)(\@)([a-zA-Z0-9_-]+)(\.)([a-zA-Z0-9]{2,4})(\.[a-zA-Z0-9]{2,4})?/i

表示@ mycollege.edu

^([a-zA-Z0-9_-]+)(@mycollege.edu)$

for php preg_match function

/^([a-zA-Z0-9_-]+)(@mycollege.edu)$/i

PHP代码

<?php 

$email = 'tahir_aS-adov@mycollege.edu';
preg_match('/^([a-zA-Z0-9_-]+)(@mycollege.edu)$/i', $email, $matches);

if ($matches) { 
    echo "Matched";
} else {
    echo "Not Matched";
}

var_dump($matches);

答案 5 :(得分:0)

这可能是一个更好的解决方案。许多人已经回答了,尽管它有点不同。

$email = "info@stakoverflow.com";

if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
 echo $email ." is a valid email address";
} else {
  echo $email ." is not a valid email address";
}

我希望这个使用起来很简单。

答案 6 :(得分:0)

在php中使用filter_var的简单函数

<?php
function email_validation($email) {
    if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
       echo("$email is a valid email address");
    } else {
       echo("$email is not a valid email address");
    }
}

//Test
email_validation('johnson123');
?>