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