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


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

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正则表达式过滤html标签属性(DEMO)
jquery ajax结合thinkphp的getjson实现跨域的方法
ThinkPHP使用心得分享-分页类Page的用法
如何调试异步加载页面里包含的js文件
JavaScript编程中实现对象封装特性的实例讲解
JavaScript获取图片像素颜色并转换为box-shadow显示
QuiteRSS: Linux桌面的RSS阅读器 你值得拥有
C#数据绑定(DataBinding)简单实现方法
css教程制作css圆角边框(兼容全部浏览器)
如何解决PHP使用mysql_query查询超大结果集超内存问题
jQuery插件开发的两种方法及$.fn.extend的详解
win10耳机有电流声而且声音很大影响使用该怎么办?
如何解决JQuery ajaxSubmit提交中文乱码
Win10 Mobile Build 10549正式推送:须回滚到WP8.1升级
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 我愿意成为一个傻瓜 《语文百花园七》教学设计之一 故乡七月雨 假如我是一只小鸟作文 某某,我放了你 祝你幸福 社区妇联工作职责 初二父亲节作文500字 关于彩虹的好句 第一次自己在家作文200字 2014年度依法行政工作计划要点_行政工作计划 在丽江暖暖的晒太阳 2014商场中秋节活动方案 不知吸取教训的人,将在悔恨里度过一生 生命的史诗 某市省国土资源厅信访室工作人员守则 爱在细微中作文400字 我和我家丫头在一起一年半啦,求祝福哦 是命运选择了我 小学五年级作文350字:我的小外甥 学前班家长工作计划 鸡蛋撞地球作文800字 小学六年级作文550字:钉纽扣比赛 “中山”猫作文 爷爷的一天 怎样才算普及了普通话? 一盏孤独 该说,还是不该说? 母爱三年级作文400字 护士七月份工作心得 科学、创新与求异思维作文3000字 那时候的青春不再,拜拜 孝河儿女 . 家乡文化 . 滋养心灵作文1500字 小河的哭泣 认输并非愚者,是一种智慧 父亲节作文300字:父亲节的贺卡 若水.向西(四) 做面疙瘩 维修电工工作标准 2014年建筑工程技术实习报告模板精选 2016年度区民主评议党员工作总结 学校网管检讨书 走向无痕的哲学思考——公开课《散步》教学实录与点评 高中高一作文900字:我爱您,祖国 酷400字 元稹《西归绝句(十二首之二)》诗歌鉴赏 应届大学生面试自我介绍 谁都有谁的谁,谁又是谁的谁? 生活太匆匆 我没有爱情,只有暗恋 【精品】安全生产网格化管理实施方案

Copyright © 2016 phpStudy |