PHP自带方法验证邮箱是否存在


Posted in PHP onFebruary 01, 2016

PHP校验邮箱地址的方法很多, 比较常用的就是自己写正则了, 不过正则多麻烦, 我PHP自带了方法做校验。

filter_var

filter_var是PHP内置的一个变量过滤的方法, 提供了很多实用的过滤器, 可以用来校验整数、浮点数、邮箱、URL、MAC地址等。

filter_var如果返回false, 说明变量无法通过过滤器, 也就是不合法了。

$email = "lastchiliarch@163.com";
 
var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
 
 
$email = "asb";
var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
 
$email = "1@a.com";
var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));

输出:

string(21) "lastchiliarch@163.com"
bool(false)
string(7) 1@a.com

对于asb这种非法邮箱格式返回了false, 但对于1@a.com则通过了,还是略有瑕疵啊。

不过一般的正则也通过会认为1@a.com是一个合法的邮箱, 那有啥办法可以更精准的验证呢?

checkdnsrr

checkdnsrr其实是用来查询指定的主机的DNS记录的,我们可以借用它来验证邮箱是否存在。

对于1@a.com肯定是MX记录不存在的。

$email = "lastchiliarch@163.com";
  var_dump(checkdnsrr(array_pop(explode("@",$email)),"MX"));
  $email = "1@a.com";
  var_dump(checkdnsrr(array_pop(explode("@",$email)),"MX"));

输出:

bool(true)
  bool(false)

可以看到, 很完美, 唯一的缺点就是太慢了, 毕竟是要做一次网络请求。 所以不适合同步对大量的邮箱采用这种做法去校验。

filter_var+checkdnsrr

我们可以接合filter_var 和checkdnsrr做校验, 对于绝大多数的非法邮箱肯定会在filter_var的时候就挂掉了, 剩下的再用

checkdnsrr进一步判断。

$email_arr = array("lastchiliarch@163.com", "1@a.com");
  foreach($email_arr as $email) {
    if (filter_var($email) === false) {
      echo "invalid email: $email \n";
      continue;
    }
 
    if(checkdnsrr(array_pop(explode("@",$email)),"MX") === false) {
      echo "invalid email: $email \n";
      continue;
    }
  }

   输出:

invalid email: 1@a.com

但要注意的是, 由于只是检查MX记录, 所以只能判断163.com是存在的, 但不能说明lastchiliarch这个用户是存在的。

想要更精确的判断邮箱存在, 那只能连接到smtp服务器去验证了。

介绍了邮箱验证,PHP自带方法如何验证邮箱、URL、IP是否合法,下面为大家介绍:

主要还是使用的是filter_var函数

语法
filter_var(variable, filter, options)
variable 必需。规定要过滤的变量。
filter 可选。规定要使用的过滤器的 ID。
options 规定包含标志/选项的数组。检查每个过滤器可能的标志和选项。

PHP Filters

PHP自带方法验证邮箱是否存在

Example #1 A filter_var() example

<?php

var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL));

var_dump(filter_var('http://example.com', FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED));

?>

以上例程会输出:

string(15) "bob@example.com"
bool(false)

以上就是本文的全部内容,希望对大家进行php邮箱验证有所帮助。

PHP 相关文章推荐
玩转图像函数库―常见图形操作
Sep 03 PHP
PHP初学者头疼问题总结
Oct 09 PHP
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
Aug 07 PHP
PHP数组内存耗用太多问题的解决方法
Apr 05 PHP
PHP MemCached高级缓存配置图文教程
Aug 05 PHP
php中取得文件的后缀名?
Feb 20 PHP
php计算数组不为空元素个数的方法
Jan 27 PHP
Yii框架登录流程分析
Dec 03 PHP
PHP中实现获取IP和地理位置类分享
Feb 10 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
Nov 04 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
Mar 25 PHP
Laravel最佳分割路由文件(routes.php)的方式
Aug 04 PHP
YII CLinkPager分页类扩展增加显示共多少页
Jan 29 #PHP
实例详解PHP中html word 互转的方法
Jan 28 #PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
Jan 28 #PHP
PHP的压缩函数实现:gzencode、gzdeflate和gzcompress的区别
Jan 27 #PHP
PHP文件上传之多文件上传的实现思路
Jan 27 #PHP
PHP内核学习教程之php opcode内核实现
Jan 27 #PHP
PHP编程入门的基本语法知识点总结
Jan 26 #PHP
You might like
我的论坛源代码(八)
2006/10/09 PHP
写php分页时出现的Fatal error的解决方法
2011/04/18 PHP
使用php 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
php跨域cookie共享使用方法
2014/02/20 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
2015/12/21 PHP
php使用crypt()函数进行加密
2017/06/08 PHP
详解关于php的xdebug配置(编辑器vscode)
2019/01/29 PHP
PHP大文件切割上传并带进度条功能示例
2019/07/01 PHP
提升你网站水平的jQuery插件集合推荐
2011/04/19 Javascript
IE 当eval遇上function的处理
2011/08/09 Javascript
将HTML的左右尖括号等转义成实体形式的两种实现方式
2014/05/04 Javascript
javascript框架设计读书笔记之种子模块
2014/12/02 Javascript
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
2014/12/12 Javascript
jQuery实现首页图片淡入淡出效果的方法
2015/06/10 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
浅谈使用MVC模式进行JavaScript程序开发
2015/11/10 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
2016/11/15 Javascript
jquery点击展示与隐藏更多内容
2016/12/03 Javascript
JS实现仿百度文库评分功能
2017/01/12 Javascript
AngularJS实现的select二级联动下拉菜单功能示例
2017/10/25 Javascript
JS实现盒子拖拽效果
2020/02/06 Javascript
Vue实现简单计算器案例
2020/02/25 Javascript
简单介绍Python中的JSON使用
2015/04/28 Python
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
Python实现学校管理系统
2018/01/11 Python
Python BS4库的安装与使用详解
2018/08/08 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
2019/01/30 Python
python redis存入字典序列化存储教程
2020/07/16 Python
python openCV实现摄像头获取人脸图片
2020/08/20 Python
什么是"引用"?申明和使用"引用"要注意哪些问题?
2016/03/03 面试题
餐厅销售主管职责范本
2014/02/19 职场文书
社区先进事迹材料
2014/05/19 职场文书
应届生找工作求职信
2014/06/24 职场文书
详细的本科生职业生涯规划范文
2014/09/16 职场文书
Windows Server 2012 修改远程默认端口3389的方法
2022/04/28 Servers