Java有哪些好的电子邮件地址验证库?是否有公共验证器的替代品?
使用官方的java电子邮件包是最简单的:
public static boolean isValidEmailAddress(String email) { boolean result = true; try { InternetAddress emailAddr = new InternetAddress(email); emailAddr.validate(); } catch (AddressException ex) { result = false; } return result; }
Apache Commons通常被称为一个可靠的项目.但请记住,如果您想确保它是真实的电子邮件,并且所有者希望在您的网站上使用该电子邮件,那么您仍需要向该地址发送验证电子邮件.
编辑:有一个错误,它在域上限制太多,导致它不接受来自新TLD的有效电子邮件.
这个错误在03/Jan/15 02:48在commons-validator版本1.4.1中解决
Apache Commons验证器可以在其他答案中提到.
pom.xml中:
commons-validator commons-validator 1.4.1
的build.gradle:
compile 'commons-validator:commons-validator:1.4.1'
进口:
import org.apache.commons.validator.routines.EmailValidator;
代码:
String email = "myName@example.com"; boolean valid = EmailValidator.getInstance().isValid(email);
并允许本地地址
boolean allowLocal = true; boolean valid = EmailValidator.getInstance(allowLocal).isValid(email);
迟到的答案,但我认为这很简单,值得:
public boolean isValidEmailAddress(String email) { String ePattern = "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@((\\[[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,}))$"; java.util.regex.Pattern p = java.util.regex.Pattern.compile(ePattern); java.util.regex.Matcher m = p.matcher(email); return m.matches(); }
测试案例:
出于生产目的,域名验证应以网络方式执行.
如果您正在尝试从客户端收到表单验证,或者只是进行bean验证 - 请保持简单.最好是进行松散的电子邮件验证,而不是做一个严格的电子邮件验证并拒绝某些人(例如,当他们尝试注册您的Web服务时).几乎所有允许在电子邮件的用户名部分和每月按字面意思添加的许多新域(例如.company,.entreprise,.estate),更安全的不限制:
Pattern pattern = Pattern.compile("^.+@.+\\..+$"); Matcher matcher = pattern.matcher(email);
问题的后期,在这里,但是:我在这个地址维持一个班级:http://lacinato.com/cm/software/emailrelated/emailaddress
它基于Les Hazlewood的课程,但有许多改进并修复了一些错误.Apache许可证.
我相信它是Java中功能最强大的电子邮件解析器,我还没有看到任何一种语言的能力,尽管可能有一种语言.它不是lexer风格的解析器,但使用了一些复杂的java正则表达式,因此效率不高,但是我的公司用它解析了超过100亿个真实地址:它当然可用于高性能情况.也许每年一次,它会打到一个地址,导致正则表达式堆栈溢出(适当),但这些是垃圾邮件地址,数百或数千个字符长,有许多引号和括号等.
RFC 2822和相关规范在电子邮件地址方面确实非常宽松,因此像这样的类对于大多数用途来说都是过度的.例如,以下是合法地址,根据规范,空格和所有:
"(again)
没有邮件服务器允许这样做,但是这个类可以解析它(并将其重写为可用的表单).
我们发现现有的Java电子邮件解析器选项不够耐用(意思是,它们都不能解析一些有效的地址),所以我们创建了这个类.
代码已有详细记录,并且有许多易于更改的选项,允许或禁止某些电子邮件表单.它还提供了许多方法来访问地址的某些部分(左侧,右侧,个人名称,注释等),以解析/验证邮箱列表标题,以解析/验证返回路径(在标题中是唯一的),等等.
编写的代码具有javamail依赖关系,但如果您不想要它提供的次要功能,则很容易删除.
我只是想知道为什么没有人想出@Email
Hibernate Validator的附加约束.验证器本身是EmailValidator
.
Les Hazlewood使用Java正则表达式编写了一个非常全面的RFC 2822兼容的电子邮件验证器类.您可以在http://www.leshazlewood.com/?p=23找到它.但是,它的彻底性(或Java RE实现)会导致效率低下 - 阅读有关长地址解析时间的注释.