【发布时间】:2011-06-07 05:44:51
【问题描述】:
我正在使用验证电子邮件地址的正则表达式,这是我正在使用的正则表达式。
preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $email)
上面的大部分代码都是不言自明的
a) ^ 代表 NOT。
b) 字符串的开头应该是_ a-z 0-9
c) 匹配下一个以点开头的字符
d) 现在 *@ 在这里是什么意思,难道只是 @ 意味着下一个字符应该是 @
e) 接下来它会再次尝试查找点,第一个点是可选的,第二个是强制性的。
f) $到底是什么意思?
【问题讨论】:
-
^在这种情况下不代表“NOT”。它只在字符类中这样做(并且仅当它是第一个字符时):[^abc]`。这里它的意思是“字符串的开始”。 -
另外,这个表述是错误的。它应该以 (\.[a-z]{2,})$/结尾。否则,您将忽略 .areo、.coop、.info、.museum、.name、.local 或 .localdomain TLD,或任何出现的新 gTLD。 -
@Thomas... 这种模式的错误远不止于此。
-
虽然我不知道你们的开发平台,但是“regex buddy”是一款非常棒的软件,可以帮助理解windows环境下的正则表达式。