好问题
Good  Question
  • 首 页
  • 问题
    • PHP
    • JAVA
    • CPlusPlus
    • C#
    • SQL
  • 关 于
  • 联 系
如何在PHP中验证一个邮箱? 关闭 返回上一级  

如何在PHP中验证一个邮箱?
+ 查看更多

发布日期:2018-03-26 13:47
分类:PHP
浏览次数:54

我如何用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 Manual filter_var()
·在PHP >= 5.2.0中可用
如果你不想改变依赖你这个函数的代码,只要这样做:
function isValidEmail($email){ 
    return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
}

注意:
当你需要有其他用处(需要使用正则)时,ereg这个已经被遗弃的函数族(POSIX正则函数)应该被preg函数族(PCRE正则函数)替代。这是小数目的一些不同之处,阅读手册即可。
 
更新1:
对于@binaryLV提出的观点:
PHP 5.3.3和5.2.14存在一个和FILTER_VALIDATE_EMAIL相关的漏洞,它会在验证一个很大的值时出现段错误。简单且安全的解决方法是在使用filter_var()之前用上strlen()函数。我不确定 5.3.4的最终版怎么样,但是一些 5.3.4的快速版也会受到影响。这个漏洞已经被修复了。
 
更新2:
这个方法当然会把bazmega@kapa验证为合法的邮箱地址,因为事实上它就是合法的地址。但是在互联网中的大多数时候,你会希望邮箱地址具有一个TLD:bazmega@kapa.com。就像在这个博客中提交的建议一样,你可以给filter_var()增加一个正则,它会在域名部分检查是否存在点(虽然不会检查是否存在合法的TLD):
function isValidEmail($email) {
    return filter_var($email, FILTER_VALIDATE_EMAIL) 
        && preg_match('/@.+\./', $email);
}

这个问题只在PHP5.3之前出现,在那个版本,他们改变了正则,现在它会做这个检查,所以你没必要这么做。

上一篇检测移动设备的最简单的方法
如何使用cURL函数将$ _POST值传递到页面?下一篇
下一篇如何使用cURL函数将$ _POST值传递到页面?

最新文章

  • 函数`__construct`用来干嘛的
    发布日期:2018-03-26
  • 通过访客的IP得到他们的地区
    发布日期:2018-03-26
  • 合并两个PHP对象的最好的方法是什么?
    发布日期:2018-03-26
  • 该如何把一该如何把一个对象转化成数组?
    发布日期:2018-03-26
  • 什么是输出缓冲区?
    发布日期:2018-03-26
  • 在PHP中怎么把用逗号分隔的字符串分隔在一个数组里?
    发布日期:2018-03-26
  • 在PHP中使用foreach循环时查找数组的最后一个元素
    发布日期:2018-03-26
关于好问
收集整理一些有用的问题和回答,造福中国的程序旺和IT喵们!
友情链接
起飞页 
相关信息
版权声明
Copyright © 2016 - 2022  苏州卡达网络科技有限公司 备案号:苏ICP备09008221号