代码之家  ›  专栏  ›  技术社区  ›  homework

检查字符串是否是PHP中的电子邮件地址

  •  48
  • homework  · 技术社区  · 15 年前

    我正在尝试执行SQL查询,但我需要不知何故地检查该值是否为电子邮件地址。 我需要一种方法来检查 $user 是一个电子邮件地址,因为我的表中有这样的用户值。

    test
    test2
    test@example.com
    test2@example.com
    test392
    test@example.net
    

    等等…

    我要这么做 $useremail 检查 $用户 找到是否是电子邮件地址。所以我可以更新这些值, WHERE user=test OR user=test@example.com 等。

    $user = strtolower($olduser);
    $useremail = "";
    
    mysql_query("UPDATE _$setprofile SET user=$sn, fc=$fc WHERE user='$user' OR user='$useremail");
    
    11 回复  |  直到 6 年前
        1
  •  6
  •   TURTLE    6 年前

    这不是一个很好的方法,不会检查电子邮件是否存在,但它会检查电子邮件是否看起来像带有@和域扩展名的电子邮件。

    function checkEmail($email) {
       $find1 = strpos($email, '@');
       $find2 = strpos($email, '.');
       return ($find1 !== false && $find2 !== false && $find2 > $find1 ? true : false);
    }
    
    $email = 'name@email.com';
    $check = checkEmail($email);
    if ( $check ) {
       echo $email . ' looks like a valid email.';
    }
    
        2
  •  183
  •   Uri    15 年前

    没有正则表达式:

    <?php
        if(filter_var("some@address.com", FILTER_VALIDATE_EMAIL)) {
            // valid address
        }
        else {
            // invalid address
        }
    ?>
    
        3
  •  8
  •   Community CDub    8 年前

    最简单的方法是使用正则表达式来检查电子邮件地址,尽管对于这一点的准确性存在一些分歧。在此详细讨论此过程:

    Using a regular expression to validate an email address

    可以使用MySQL中的regexp根据正则表达式从数据库中进行选择:

    http://dev.mysql.com/doc/refman/5.1/en/regexp.html

        4
  •  5
  •   Community CDub    8 年前

    您可以使用正则表达式来验证输入字符串是否与电子邮件地址匹配:

    <?php 
    $email = "someone@example.com"; 
    if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) { 
      echo "Valid email address."; 
    } 
    else { 
      echo "Invalid email address."; 
    } 
    ?>
    

    来自: http://www.totallyphp.co.uk/code/validate_an_email_address_using_regular_expressions.htm

    编辑 :有关更准确的表达式,请参阅 Travis answer 关于这个问题

        5
  •  4
  •   Denilson Sá Maia    13 年前

    这个函数 is_email() 会给你一个明确的答案,无论字符串是否是一个有效的电子邮件地址。据我所知,没有其他解决方案能以同样的权威水平来做到这一点。

    如果我正确理解这个例子,你可以这样使用它

    $user = strtolower($olduser);
    $useremail = (is_email($user)) ? $user : '';
    

    PHP内置函数不完整。我是 is_email() 所以我在这里自吹自擂,但我为此付出了很多努力,以使其他人都不必再这样做。

        6
  •  3
  •   Rob    15 年前

    我已经在数百个网站上使用这个功能很多年了。这可能并不完美,但我从来没有抱怨过错误的否定(或积极的):

    function validate_email($email) {
        return (preg_match("/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/", $email) || !preg_match("/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/", $email)) ? false : true;
    }
    
        7
  •  3
  •   Ben    12 年前
    if(filter_var($email, FILTER_VALIDATE_EMAIL))
    {
        echo 'This is a valid email address.';
        echo filter_var($email, FILTER_VALIDATE_EMAIL);
        //exit("E-mail is not valid");
    }
    else
    {
        echo 'Invalid email address.';
    } 
    
        8
  •  2
  •   iamkoa    15 年前
    $user_email = "email@string.com";
    
    function isEmail($user) {
         if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
              return true
         } else {
              return false
         }
    }
    
    if (isEmail($user_email)) {
         // email is valid, run the query
         mysql_query("UPDATE _$setprofile SET user=$sn, fc=$fc WHERE user='$user' OR user='$user_email");
    }
    
        9
  •  2
  •   Scott Vander Molen    15 年前

    既然每个人都在发布他们的正则表达式,下面是我的: ^((([\w+-]+)(.[\w+-]+)*)|(\"[^(\|\")]{0,62}\"))@(([a-zA-Z0-9-]+.)+([a-zA-Z0-9]{2,})|[?([1]?\d{1,2}|2[0-4]{1}\d{1}|25[0-5]{1})(.([1]?\d{1,2}|2[0-4]{1}\d{1}|25[0-5]{1})){3}]?)$

    据我所知,它支持RFC规范中的所有内容,包括许多大多数人通常不包括的内容。

        10
  •  2
  •   BalusC    15 年前

    除了大多数不支持的所有regex建议之外 全部的 可用TLD(包括例如 .info .museum )以及即将到来的国际互联网名称与地址分配机构允许中文和阿拉伯语进入网址的决定(这将使 [a-z] \w fail)以下更通用的regex就足够了

    ([^.@]+)(\.[^.@]+)*@([^.@]+\.)+([^.@]+)
    

    我也会提到做一个 WHERE user=test OR user=test@example.com 太容易出错。最好在表中使用自动生成的pk,并在 WHERE 条款。

    我真的看不到严格的、长的和不可读的mailregex符合rfcxxxx规范的价值。最好的方法仍然是向最终用户发送带有激活密钥的链接的邮件,以便最终用户确认邮件地址。同时在表格中告知。如有必要,让用户输入电子邮件地址两次,就像输入密码一样。

        11
  •  0
  •   Douglas Evaristo    7 年前
    $user_email = "email@gmailcom";
    
    function isEmail($email) {
         if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
              return true;
         } else {
              return false;
         }
    }
    
    if (isEmail($user_email)) {
         // email is ok!
    } else {
         // email not ok
    }