如何检查由我的代码生成的电子邮件是否有效(根据 RFC 5322)?RFC 5322电子邮件格式验证
2
A
回答
3
这里有一个PCRE正则表达式(从PHP库中提取),将根据RFC 5322验证:
'/^(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){255,})(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){65,}@)((?>(?>(?>((?>(?>(?>\x0D\x0A)?[\t ])+|(?>[\t ]*\x0D\x0A)?[\t ]+)?)(\((?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-\'*-\[\]-\x7F]|\\\[\x00-\x7F]|(?3)))*(?2)\)))+(?2))|(?2))?)([!#-\'*+\/-9=?^-~-]+|"(?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\x7F]))*(?2)")(?>(?1)\.(?1)(?4))*(?1)@(?!(?1)[a-z\d-]{64,})(?1)(?>([a-z\d](?>[a-z\d-]*[a-z\d])?)(?>(?1)\.(?!(?1)[a-z\d-]{64,})(?1)(?5)){0,126}|\[(?:(?>IPv6:(?>([a-f\d]{1,4})(?>:(?6)){7}|(?!(?:.*[a-f\d][:\]]){8,})((?6)(?>:(?6)){0,6})?::(?7)?))|(?>(?>IPv6:(?>(?6)(?>:(?6)){5}:|(?!(?:.*[a-f\d]:){6,})(?8)?::(?>((?6)(?>:(?6)){0,4}):)?))?(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)(?>\.(?9)){3}))\])(?1)$/isD'
不像彼得回答它允许单标签域名(这是语法上有效)和IPv6地址文字。
但是,我强烈建议根据RFC 5321进行验证,该验证不允许评论或折叠空白(语义上不可见,因此实际上不是电子邮件地址的一部分),也不允许过时的本地部分(可以重写为非过时的引用字符串):
'/^(?!(?>"?(?>\\\[ -~]|[^"])"?){255,})(?!"?(?>\\\[ -~]|[^"]){65,}"[email protected])(?>([!#-\'*+\/-9=?^-~-]+)(?>\.(?1))*|"(?>[ !#-\[\]-~]|\\\[ -~])*")@(?!.*[^.]{64,})(?>([a-z\d](?>[a-z\d-]*[a-z\d])?)(?>\.(?2)){0,126}|\[(?:(?>IPv6:(?>([a-f\d]{1,4})(?>:(?3)){7}|(?!(?:.*[a-f\d][:\]]){8,})((?3)(?>:(?3)){0,6})?::(?4)?))|(?>(?>IPv6:(?>(?3)(?>:(?3)){5}:|(?!(?:.*[a-f\d]:){6,})(?5)?::(?>((?3)(?>:(?3)){0,4}):)?))?(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)(?>\.(?6)){3}))\])$/iD'
+0
必须参考有关使用regexp进行电子邮件验证的参考QA:[使用正则表达式验证电子邮件地址](http://stackoverflow.com/q/201323/4074148) – Veve
0
使用这个正则表达式就像98%有效。它不验证如下:
[email protected][IPv6:2001:db8:1ff::a0b:dbd0]
但它涵盖一切
^(([^<>()[\\]\\.,;:\\[email protected]\"]+(\\.[^<>()[\\]\\.,;:\\[email protected]\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$
注:这是直接从一些生产Golang代码运所以增加了斜杠。
相关问题
- 1. 电子邮件验证的问题[ABNF] [RF 5322]
- 2. jQuery不验证电子邮件格式
- 3. 电子邮件格式验证问题
- 4. 验证电子邮件格式PHP
- 5. Android电子邮件验证与Firebase电子邮件验证
- 6. 电子邮件验证使用Java的RFC 2821
- 7. Firebase电子邮件身份验证iOS:“电子邮件格式不正确”
- 8. 发送电子邮件之前的电子邮件格式验证ajax
- 9. posterous风格电子邮件验证
- 10. Zend的形式验证电子邮件
- 11. 电子邮件验证表达式
- 12. CakePHP电子邮件验证
- 13. 验证电子邮件
- 14. rspec电子邮件验证
- 15. 验证电子邮件
- 16. Firebase电子邮件验证
- 17. ResearchKit:验证电子邮件
- 18. Jquery - 验证电子邮件
- 19. 电子邮件验证javascript
- 20. JavaScript电子邮件验证
- 21. 电子邮件验证:JavaScript
- 22. 电子邮件验证 - HTML
- 23. NSRegularExpression验证电子邮件
- 24. 电子邮件验证PHP
- 25. 梨电子邮件验证
- 26. OpenERP电子邮件验证
- 27. JavaScript电子邮件验证 - @
- 28. PHP - 电子邮件验证
- 29. 电子邮件验证
- 30. 电子邮件验证/ PrimeFaces
您是试图验证电子邮件(即Internet电子邮件)还是电子邮件_addresses_? – pmocek