使用...正则表达式验证 PHP 中的电子邮件?

Validate email in PHP using... regex?

我正在看书学习PHP,我有一个问题!

这是电子邮件验证代码的一部分:

$pattern = '/\b[\w.-]+@[\w.-]+\.[A-Za-z]{2,6}\b/';
if(!preg_match($pattern, $email))
{ $email = NULL; echo 'Email address is incorrect format'; }

谁能给我解释一下“$pattern”在做什么? 我不确定,但根据我以前对连接到网站的应用程序进行编码的了解,我认为它可能叫做 "Regex"?

如果有人能向我解释那句话,我将不胜感激。此外,如果它是 "Regex,",您能否提供一个 link 到某个地方,以便简要说明它是什么以及它是如何工作的?

正则表达式是正则表达式:它是一种描述一组字符串的模式,通常是所有可能字符串的子集。正则表达式可以使用的所有特殊字符都在您的问题被标记为重复的问题中进行了解释。

但专门针对您的情况;有一个很好的工具可以解释正则表达式 here:

NODE                     EXPLANATION
--------------------------------------------------------------------------------
  \b                       the boundary between a word char (\w) and
                           something that is not a word char
--------------------------------------------------------------------------------
  [\w.-]+                  any character of: word characters (a-z, A-
                           Z, 0-9, _), '.', '-' (1 or more times
                           (matching the most amount possible))
--------------------------------------------------------------------------------
  @                        '@'
--------------------------------------------------------------------------------
  [\w.-]+                  any character of: word characters (a-z, A-
                           Z, 0-9, _), '.', '-' (1 or more times
                           (matching the most amount possible))
--------------------------------------------------------------------------------
  \.                       '.'
--------------------------------------------------------------------------------
  [A-Za-z]{2,6}            any character of: 'A' to 'Z', 'a' to 'z'
                           (between 2 and 6 times (matching the most
                           amount possible))
--------------------------------------------------------------------------------
  \b                       the boundary between a word char (\w) and
                           something that is not a word char

验证电子邮件地址的正确方法

但是如果您使用的是 PHP >= 5.2.0(您可能是),则不需要为此使用正则表达式。使用内置 filter_var():

代码更清晰
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
    // email valid
} else {
    // email invalid
}

您不必担心边界情况或任何事情。