我如何使用php5验证输入值是有效的电子邮件地址。现在我正在使用此代码
function isValidEmail($email){ $pattern = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$"; if (eregi($pattern, $email)){ return true; } else { return false; } }
但显示已弃用的错误。我该如何解决此问题。请帮我。
您可以使用该filter_var()功能,该功能为您提供了许多方便的验证和消毒选项。
filter_var()
filter_var($email, FILTER_VALIDATE_EMAIL)
PHP手册filter_var()
在 PHP > = 5.2.0中*可用 *
如果您不想更改依赖于函数的代码,请执行以下操作:
function isValidEmail($email){ return filter_var($email, FILTER_VALIDATE_EMAIL) !== false; }
注意 :对于其他用途(需要Regex的地方),不赞成使用的ereg函数族(POSIX Regex Functions)应替换为该preg族(PCRE Regex Functions)。差异很小,阅读本手册就足够了。
ereg
preg
更新1 指出:
PHP 5.3.3和5.2.14有一个与FILTER_VALIDATE_EMAIL相关的错误,当验证大值时会导致segfault。在此strlen() 之前,使用简单安全的解决方法filter_var()。我不确定5.3.4最终版,但据信某些5.3.4快照版本也受到了影响。
strlen()
该错误已得到修复。
更新2 :此方法当然会验证bazmega@kapa为有效的电子邮件地址,因为实际上它是有效的电子邮件地址。但是大多数时候,在Internet上,您还希望电子邮件地址具有TLDbazmega@kapa.com。 in-php/5855853#comment18460128_5855853)发布的链接)所建议的那样,您可以filter_var()使用正则表达式进行扩充,该正则表达式将检查域部分中是否存在点(尽管不会检查_有效的_ TLD):
bazmega@kapa
bazmega@kapa.com
function isValidEmail($email) { return filter_var($email, FILTER_VALIDATE_EMAIL) && preg_match('/@.+\./', $email); }