怎样对 email 地址进行验证( validation)? PHP manual 上,有好几个警告,不建议使用 php 自带的 filter, FILTER_VALIDATE_EMAIL。

2016-11-29 16:30:23 +08:00
 ericgui

PHP manual 里, http://php.net/manual/en/function.filter-var.php ,有好几个 note ,都不推荐使用 PHP 自带的 FILTER_VALIDATE_EMAIL 对 email 地址进行验证( validation )。

其中一个 note 是这样的: Do not use FILTER_VALIDATE_EMAIL in production! It's not compatible with mail standarts

我给此 note 的作者写邮件,他回复说:

For moment I use regex "\S@\S" and validation by DNS query (MX).

I have some valid examples to test: andrey.k.p@gmail.com admin@шина.рф 9test+issue12@test15

You should analise a lot of RFC about mail and DNS subsystem before filter creation. Also there are interesting idea to use validation by UTF8 diapasons (in coments http://php.net/manual/en/function.filter-var.php).

那么,我有 3 个问题: 1 、什么是 validation by DNS query ( MX )?啥意思? 2 、各位高人都是处理 email 地址的 validation 的呢? 3、有没有现成的轮子,直接可用的? 谢谢

5561 次点击
所在节点    PHP
7 条回复
996635
2016-11-29 17:12:59 +08:00
1. 通过网络请求 验证 mail 服务器是否可访问
2 3 .请 google symfony validator
vibbow
2016-11-29 18:23:54 +08:00
1. 理想很美好,现实很惨烈。如果不做异步验证,把你程序拖慢几秒钟都是很正常的。
2. [a-zA-Z0-9._-]+@[a-zA-Z0-9]+\.[a-zA-Z]+(\.[a-zA-Z]+)?
// 随手写的正则式,没测试过
// 能满足 99%的需求就够了,不考虑那 1%的人。
dlllcs
2016-11-29 18:32:56 +08:00
其实好简单, email 验证码或者激活链接不就是干这个的?
SourceMan
2016-11-29 19:13:17 +08:00
@vibbow 不支持中文邮
ericgui
2016-11-29 19:27:02 +08:00
@dlllcs 我竟无言以对。。。。。
kfll
2016-11-29 19:47:37 +08:00
看你要验证格式还是验证有效性还是验证唯一性了……
iamshang
2016-11-29 19:51:25 +08:00
嗯 整那么复杂干啥,正则验证格式,发送邮件验证有效性就满足多数需求了吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/324130

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX