您可以使用该函数,它为您提供了许多方便的验证和清理选项。filter_var()
filter_var($email, FILTER_VALIDATE_EMAIL)
如果您不想更改依赖于您的函数的代码,只需执行以下操作:
function isValidEmail($email){
return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
}
注意:对于其他用途(需要正则表达式),不推荐使用的函数系列(POSIX 正则表达式函数)应替换为该系列(PCRE 正则表达式函数)。有少量的差异,阅读手册应该就足够了。ereg
preg
更新1:正如@binaryLV所指出的:
PHP 5.3.3 和 5.2.14 有一个与 FILTER_VALIDATE_EMAIL 相关的 bug,导致在验证大值时出现 segfault。简单安全的解决方法是使用之前。我不确定5.3.4 final,但据记载,一些5.3.4快照版本也受到了影响。strlen()
filter_var()
此错误已修复。
更新2:此方法当然会验证为有效的电子邮件地址,因为实际上它是有效的电子邮件地址。但大多数时候在互联网上,您还希望电子邮件地址具有TLD:。正如这篇博客文章(@Istiaque Ahmed发布的链接)中所建议的那样,您可以使用正则表达式进行扩充,该正则表达式将检查域部分中是否存在点(尽管不会检查有效的TLD):bazmega@kapa
bazmega@kapa.com
filter_var()
function isValidEmail($email) {
return filter_var($email, FILTER_VALIDATE_EMAIL)
&& preg_match('/@.+\./', $email);
}
正如@Eliseo Ocampos所指出的那样,这个问题只存在于PHP 5.3之前,在该版本中,他们更改了正则表达式,现在它执行此检查,因此您不必这样做。