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 相关文章推荐
php设计模式 Visitor 访问者模式
Jun 28 PHP
PHP内核探索:变量概述
Jan 30 PHP
一个经典的PHP文件上传类分享
Nov 18 PHP
php读取flash文件高宽帧数背景颜色的方法
Jan 06 PHP
PHP中浮点数计算比较及取整不准确的解决方法
Jan 09 PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
Jul 31 PHP
PHP中each与list用法分析
Jan 08 PHP
PHP实现QQ登录实例代码
Jan 14 PHP
PHP让数组中有相同值的组成新的数组实例
Dec 31 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
Mar 12 PHP
PHP实现文件上传后台处理脚本
Mar 04 PHP
基于PHP的微信公众号的开发流程详解
Aug 07 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
php 操作符与控制结构
2012/03/07 PHP
php_screw 1.5:php加密: 安装与使用详解
2013/06/20 PHP
php不用正则验证真假身份证
2013/11/06 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
2016/03/10 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
PHP如何通过date() 函数格式化显示时间
2020/11/13 PHP
用Javascript做flash做的事..才完成的一个类.Auntion Action var 0.1
2007/02/23 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
jquery提示效果实例分析
2014/11/25 Javascript
JavaScript创建闭包的两种方式的优劣与区别分析
2015/06/22 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
微信小程序删除处理详解
2017/08/16 Javascript
Vue 2.0学习笔记之使用$refs访问Vue中的DOM
2017/12/19 Javascript
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
Bootstrap Table实现定时刷新数据的方法
2018/08/13 Javascript
uni app仿微信顶部导航条功能
2019/09/17 Javascript
详解vue-cli项目在IE浏览器打开报错解决方法
2020/12/10 Vue.js
如何解决django配置settings时遇到Could not import settings 'conf.local'
2014/11/18 Python
Python比较两个图片相似度的方法
2015/03/13 Python
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
python实现多线程抓取知乎用户
2016/12/12 Python
Python删除Java源文件中全部注释的实现方法
2017/08/30 Python
Django CSRF认证的几种解决方案
2020/03/03 Python
python使用gdal对shp读取,新建和更新的实例
2020/03/10 Python
H5 meta小结(前端必看篇)
2016/08/24 HTML / CSS
儿科主治医生个人求职信
2013/09/23 职场文书
应聘自荐书
2013/10/08 职场文书
中医药大学毕业生自荐信
2013/11/08 职场文书
个人自我鉴定写法
2013/11/30 职场文书
好军嫂事迹材料
2014/01/15 职场文书
先进个人事迹材料
2014/01/25 职场文书
社区助残日活动总结
2014/08/29 职场文书
2014年电话销售工作总结
2014/12/01 职场文书
2016年小学优秀班主任事迹材料
2016/02/29 职场文书
FP-growth算法发现频繁项集——构建FP树
2021/06/24 Python
关于JS中的作用域中的问题思考分享
2022/04/06 Javascript