有人可以向我解释一下吗? 这是我的代码:
$regex = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+'
. '(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/';
if (preg_match($regex, $email)) {
echo $email . " is a valid email. We can accept it.";
} else {
echo $email . " is an invalid email. Please try again.";
}
如果我使用这个正则表达式的例子:
^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)↪*(\.[a-z]{2,3})$
或我得到的另一个不同的正则表达式:
preg_match() [function.preg-match]: No ending delimiter '^' found
如果我使用filter_var('some_regular_expression', FILTER_EMAIL_VALIDATOR)
,则asd!qwe@gmail.com
之类的电子邮件是有效的???
答案 0 :(得分:1)
使用preg_XXX
函数时,正则表达式参数的第一个字符是分隔符 - 在第一个示例中为/
。它必须出现在正则表达式的末尾,它用于将正则表达式与修饰符选项字符分开,例如:
/[a-z]/i
第二个/
将正则表达式与i
(不区分大小写)修饰符分开。
因此,您只需将正则表达式更改为:
/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)↪*(\.[a-z]{2,3})$/
我不确定↪
字符在那里是什么。它似乎不适合验证电子邮件。
是的,asd!qwe@gmail.com
是有效的电子邮件。回到UUCP邮件传输的那一天,host1!host2!host3!username@uu.net
形式的地址很常见 - UUCP路径中的!
个字符分隔了主机名。有关电子邮件验证的建议,请参阅Using a regular expression to validate an email address。