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 交通频道 作文范文 无锡-万州 鲁山-重庆北 固始-杨陵 浠水-孔垄 徐州东-龙游 二道湾-塔河 清原-蓝村 曲阜东-铁岭西 阜阳-新乡 即墨北-威海 山坡东-汤逊湖 金州-大安北 苇河-佛岭 山市-高家 辛集-锦州 惠州-弋阳 新乡-义马 宁陵县-聊城 石岭-白山市 金华南-丽水 沈阳北-白银西 新县-曲靖 牙克石-张家口南 恩施-汨罗东 镇江南-滁州 罗山-张桥 于都-亳州 四平-辽中 杭州东-利川 邓州-定西 泰州-咸阳 温都和硕-道仑郭勒 龙川-晏城 西峡-乐都 广州东-章丘 大雁-南木 惠安-水家湖 项城-沈丘 民权-泾川 重庆-哈尔滨西 涪陵-茂名西 繁昌西-上海 潍坊-集宁南 奈曼-柳河 六枝-义乌 济南-砀山南 新余-富川 清原-蚌埠 江油-华山 东胜西-大板 徐水-广安 山海关-唐山北 淄博-来宾 茂名-井冈山 石人城-呼兰 天津南-威海 沈阳-一面坡 曲阜东-许昌东 洋河-南通 上虞-淮南 包头-临河 盖州-铁岭 鲁山-沙河市 双龙山-庆安 石家庄-广安 宣汉-南召 福山镇-美兰 漳浦-古田北 昌图西-公主岭南 德州东-霞浦 讷尔克气-齐齐哈尔 廊坊北-保康 介休东-永济北 福鼎-台州 苏州-武夷山 郑州-芜湖 兰州-西峡 成都-犀浦东 台安-葫芦岛北 铁口-联合乡 从晋城市沁水县到忻州市五寨县怎么走最快
动车组D135还在新乡停吗
k1054火车列车_k1054火车列车
淄博什么地方能找到厨师
国民党第74军战史
出发时间是1月15日 谁能帮忙提供一个从大连到成都的或列车火车路
从海宁中国皮革城到海宁西列车火车站怎么走
鄯善县到吐鲁番的长途汽车客车多长时间一班,多长时间到
想这几天去西岭雪山?希望大家给点建议
桂林到株州的列车票价是多少春运的
从杭州到苏州有多少公里
从深圳火车列车站到宝安区西乡镇大门口怎么走
怎么坐公交从茂名东火车站到威威商业步行街
郑州驾车到兰考,过路费大概多少钱,怎么走
古田会议有什么精神
宁德到泉州的路线怎么走最便宜
从哈尔滨至美国的往返机票为票价多少钱
从江夏开发区管委会到武汉市青山区武东路特一号公交路线
扬州哪个站可以到北安丰?我从列车火车站坐几路公交车可以去那个站
我是深圳人,想请桂林的朋友帮忙查一下从10月5日桂林到深圳的
请问我想从广州花都狮岭发物流到杭州桐庐发什么物流发提货
从济南到丽江怎么去
从平顶山到洛阳的汽车
我想国庆广西自驾游,从广州出发,大概想去南宁、桂林、北海
请问龙岩到抚顺有什么好的路线,我是新生,不懂,急需,谢谢
南昌大年初7到郑州的列车火车票有卖吗什么时候去买,莲塘地区要到
济宁市通达驾校的练车场在什么地方
上海到杭州富阳的车费是多少
从汾阳到太原长风大卖场怎么坐车
从上海机场到青浦区做什么车方便,好找,快

Copyright © 2016 phpStudy |