为初学者阅读正则表达式

时间:2014-02-21 03:45:21

标签: php regex validation email

我已经阅读了不同网站上的基本正则表达式来研究它们。我的问题是我不理解他们中的一些。这是一个我正在寻找验证来自w3schools的电子邮件地址的例子

$email = test_input($_POST["email"]);
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
   $emailErr = "Invalid email format"; 
}

我不理解我自己理解的部分[\w\-]+,它说“字符串至少包含一个字母数字”。你能给我一个明确的解释吗?

3 个答案:

答案 0 :(得分:1)

character class [\w\-](或更准确地说,没有不必要的转义,[\w-])意味着

  1. \w - Word character;任何字母,数字或下划线字符,或......
  2. -任何连字符
  3. 使用[\w-]+表示“一个或多个字母,数字,下划线或连字符”

    如上述评论所述,请勿使用W3Schools。 http://www.regular-expressions.info/是可用的最佳资源(恕我直言)。

答案 1 :(得分:1)

说明:

[\w\-]+

这意味着任何单词字符(a-z和下划线)和连字符\-,在一次和无限次之间,根据需要返回(贪婪)+

一些很好的正则表达式学习资源:

  

http://Regex101.com

     

http://www.regular-expressions.info

了解它。

答案 2 :(得分:1)

以下是细分:

  1. \w是一个字符类,简单地表示字母,数字和下划线。在正则表达式中,这是[A-Za-z0-9_]
  2. 的缩写
  3. \w\-将连字符添加到\ w类(不确定为什么连字符被转义)
  4. [\w\-]+表示至少重复一次该模式。所以,9 @ email.com是有效的,但@ email.com显然不是。
  5. 此外,根据您的使用案例,您可能对此讨论感兴趣,了解为什么依赖正则表达式来验证电子邮件地址可能是一个坏主意:

      

    Using a regular expression to validate an email address