我已经阅读了不同网站上的基本正则表达式来研究它们。我的问题是我不理解他们中的一些。这是一个我正在寻找验证来自w3schools的电子邮件地址的例子
$email = test_input($_POST["email"]);
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
$emailErr = "Invalid email format";
}
我不理解我自己理解的部分[\w\-]+
,它说“字符串至少包含一个字母数字”。你能给我一个明确的解释吗?
答案 0 :(得分:1)
character class [\w\-]
(或更准确地说,没有不必要的转义,[\w-]
)意味着
\w
- Word character;任何字母,数字或下划线字符,或...... -
任何连字符使用[\w-]+
表示“一个或多个字母,数字,下划线或连字符”。
如上述评论所述,请勿使用W3Schools。 http://www.regular-expressions.info/是可用的最佳资源(恕我直言)。
答案 1 :(得分:1)
[\w\-]+
这意味着任何单词字符(a-z和下划线)和连字符\-
,在一次和无限次之间,根据需要返回(贪婪)+
了解它。
答案 2 :(得分:1)
以下是细分:
\w
是一个字符类,简单地表示字母,数字和下划线。在正则表达式中,这是[A-Za-z0-9_]
\w\-
将连字符添加到\ w类(不确定为什么连字符被转义)[\w\-]+
表示至少重复一次该模式。所以,9 @ email.com是有效的,但@ email.com显然不是。此外,根据您的使用案例,您可能对此讨论感兴趣,了解为什么依赖正则表达式来验证电子邮件地址可能是一个坏主意: