有人可以向我解释一下吗?这是我的代码:
$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
这样的电子邮件是有效的???
使用 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路径中的主机名。有关电子邮件验证的建议,请参阅使用正则表达式验证电子邮件地址。