【问题标题】:How do I validate e-mail with filter_val in a php session?如何在 php 会话中使用 filter_var 验证电子邮件?
【发布时间】:2011-03-21 03:11:39
【问题描述】:

以下是我最近失败的尝试:

if ($_SERVER['REQUEST_METHOD']=="POST") {

 if (!empty($_SESSION['email'])) {

      if(!filter_var($_SESSION['email'], FILTER_VALIDATE_EMAIL)) {
          echo "Required: valid e-mail address";
          } else {
                  echo "Your email is " . $_SESSION['email'] . "<br />";
                 } 

   } else {
     echo "Required: valid e-mail address";
          }
}

// 当变量为空时,我会收到正确的消息,但如果我输入无效或有效的电子邮件,则不会有任何回显。我整天都在这。

【问题讨论】:

  • 我觉得我们需要更多信息。如果什么都没有回显,那么一定是某个错误被触发了。您的错误日志中有任何内容,或者您​​是否打开了 error_reporting?
  • 您究竟为什么要检查会话中的有效电子邮件?为什么在设置电子邮件会话变量之前不检查?
  • error_reporting 显示 2039 整数值。
  • 好点,囚犯,我会改变我的方法来更早地检查这些值,尽管我不确定这样做会解决我当前的问题......也许吧。

标签: php email-validation


【解决方案1】:
if(filter_var($_SESSION['email'], FILTER_VALIDATE_EMAIL)) {
    // it's valid so do something
}
else {
    // it's not valid so do something else
}

【讨论】:

  • 请解释这与 OP 的原始代码有何不同。
  • 这个在我的电脑上为我工作。所以我发布了解决方案。就是这样。
  • 同样的错误;同样的结果。如果相同的代码适用于 Coding-Freak,那么我的错误一定在其他地方。我会寻找其他的可能性。
【解决方案2】:

是旧帖子,但这会有所帮助。

function valid_email($email) 
{
    if(is_array($email) || is_numeric($email) || is_bool($email) || is_float($email) || is_file($email) || is_dir($email) || is_int($email))
        return false;
    else
    {
        $email=trim(strtolower($email));
        if(filter_var($email, FILTER_VALIDATE_EMAIL)) return $email;
        else
        {
            $pattern = '/^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/iD';
            return (preg_match($pattern, $email) === 1) ? $email : false;
        }
    }
}

此函数使用 filter_var 并检查电子邮件是否具有“超级域”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-04
    • 2017-04-11
    • 2015-12-08
    • 1970-01-01
    • 2011-03-23
    • 2011-08-16
    • 2018-05-05
    • 2016-02-29
    相关资源
    最近更新 更多