Php 一般和特定(大学领域)的最佳电子邮件验证功能?

Php 一般和特定(大学领域)的最佳电子邮件验证功能?,php,email-validation,Php,Email Validation,我知道电子邮件验证是其中一件事,但这并不是最有趣的事情。我正在建立一个网站,我想把我的读者限制在学院里的人,我还想为我的用户提供一个首选的电子邮件地址。这是一个由两部分组成的问题 是否有一个真正可靠的php函数用于电子邮件验证 我可以验证来自特定域的电子邮件吗。我不想只是检查域名是否存在,因为我知道域名已经存在。是否真的需要验证用户是否拥有有效的@mycollege.edu网址 这就是我使用的: function check_email_address($email) {

我知道电子邮件验证是其中一件事,但这并不是最有趣的事情。我正在建立一个网站,我想把我的读者限制在学院里的人,我还想为我的用户提供一个首选的电子邮件地址。这是一个由两部分组成的问题

  • 是否有一个真正可靠的php函数用于电子邮件验证

  • 我可以验证来自特定域的电子邮件吗。我不想只是检查域名是否存在,因为我知道域名已经存在。是否真的需要验证用户是否拥有有效的@mycollege.edu网址

  • 这就是我使用的:

       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;
        }
    
    功能检查电子邮件地址($email){
    //首先,我们检查是否有一个@符号,长度是否正确
    如果(!preg_match(“/^[^@]{1,64}@[^@]{1255}$/”,$email)){
    //电子邮件无效,因为一节中的字符数或@符号数错误。
    返回false;
    }
    //把它分成几个部分,让生活更轻松
    $email_数组=分解(“@”,$email);
    $local_array=explode(“.”,$email_array[0]);
    对于($i=0;$i
    编辑将折旧后的ereg替换为符合PHP 5.3的preg_match

    这应该可以:

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

    如果你真的想确认它的有效性,那就让你的注册表单给他们发送一封带有URL链接的电子邮件,他们必须点击验证

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

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

    $arr = explode('@', $email_address);
    if ($arr[1] == 'mycollege.edu')
    {
        // Then it's from your college
    }
    
    PHP也有自己的方法,可以使用filter\u var验证电子邮件地址:

    请阅读此处

    或者简言之

    var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL));
    
    对于任何电子邮件
    ([a-zA-Z0-9\-]+)(\@)([a-zA-Z0-9\-]+)(\.)([a-zA-Z0-9]{2,4})(\.[a-zA-Z0-9]{2,4})

    对于php preg_match函数

    /([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)$

    对于php preg_match函数

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

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

    $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";
    }
    

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

    在php中使用filter\u 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');
    ?>
    
    
    
    这个问题的标准答案的可能重复(包括两部分):这是否回答了您的问题?是的:(OP没有指定PHP5.3。我仍然需要将此函数迁移到preg_match(这很简单)。尽管如此,它仍然有效。:)你所要做的就是添加分隔符并更改名称。哦,我明白了……现在就让我来做类似的事情。我知道风向了P@Chris,为什么不使用php5内置电子邮件验证:
    returnfilter\u var($email,filter\u VALIDATE\u email)和&preg\u match('/@.+\./',$email)
    。在最终测试之前,应该修剪电子邮件地址。还需要对返回值进行整数转换。在这里可以找到:electrictoolbox.com/php电子邮件验证筛选器var updated。@在撰写本文时,我觉得这种严格的正则表达式方法是“最好的”“对于我遇到的用例。当然,这是一种非常主观的观点
    filter\u var
    可以工作,并且它使用了比这更复杂的正则表达式集。没有具体的理由不使用它,我只是更喜欢这种方法,因为它对我来说是可靠的。Franky,我很惊讶他接受了这个答案,因为我没有完全回答他的问题:DW3学校不是一个可靠的信息来源。认真地使用PHP自己的文档。当你可以直接从源代码中获得非常完整的文档时,为什么要相信“某个网站”呢?这是使用PHP网站而不是W3S网站的一个公平点。这是我在谷歌搜索filter_var电子邮件时想到的第一件事。学校花了很多钱让自己在成绩上名列前茅。他们还用ASP、VB、C和javascript等错误文档毒害web。他们没有地位和信誉。对于Javascript,将“MDC”放在Google搜索词前面,您将获得Mozilla开发中心。对于php,请将“php.net”放在您的术语前面,以便每次获取官方文档。:)我可能会发送一个验证电子邮件地址。好主意,这将验证地址,而不是@mycollege.edu也是正确的。对我来说,这是正确的<代码>php-r“var\u转储(filter\u var('df@mycollege.edu“
    (PHP5.3.3-7)他只想要@mycollege.edu上的地址进行验证。其他任何事情都应该失败。
    <?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');
    ?>