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: [email protected] 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、有没有现成的轮子,直接可用的? 谢谢
1
996635 2016-11-29 17:12:59 +08:00
1. 通过网络请求 验证 mail 服务器是否可访问
2 3 .请 google symfony validator |
2
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%的人。 |
3
dlllcs 2016-11-29 18:32:56 +08:00
其实好简单, email 验证码或者激活链接不就是干这个的?
|
6
kfll 2016-11-29 19:47:37 +08:00 via iPhone
看你要验证格式还是验证有效性还是验证唯一性了……
|
7
iamshang 2016-11-29 19:51:25 +08:00 via Android
嗯 整那么复杂干啥,正则验证格式,发送邮件验证有效性就满足多数需求了吧
|