什么是 Java 好的电子邮件地址验证库?有任何常规验证程序的替代方法?

2009-03-08 23:51:47
问题评论:

我将只保留这这里︰ davidcelis.com/blog/2012/09/06/...

对于一些当前 URL: commons.apache.org/proper/commons-validator/apidocs/org/apache/...

回答:

Apache 一些通常被称为实力雄厚的项目。请记住,但是,您仍需要验证电子邮件发送到的地址,如果您想要确保它是真实的电子邮件,并且所有者希望它在您的站点上使用。

编辑︰ 没有bug位置是限制性太强开域,使其不接受有效的电子邮件,从新的 Tld。

此 bug 已解决 03/日/15 中一些验证程序版本 1.4.1 02:48

我同意额外的位的引用,但这些属于常规验证项目?

否,Apache EmailValidator类不发送电子邮件以进行验证。

如果用例来验证用户的远程电子邮件地址,此解决方案都有一个相当大的缺陷 (类似于 InternetAddress.validate()): EmailValidator 认为 user@[10.9.8.7] 为有效的电子邮件地址-他们是根据 RFC,但也许不是为用户注册/联系人窗体。

@zillion,Apache 常规中提及:"此实现不能保证电子邮件地址中捕捉所有可能的错误。"和我说,您应该怎样做来"确保它是真实的电子邮件"。但可能是在很少的环境中,有效具有本地 Ip 地址。

Apache 常规 EmailValidator 有一个严重的缺点︰ 不支持 IDN。

使用正式的 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;
}

请注意,InternetAddress.validate() 考虑 user@[10.9.8.7] 并为有效的电子邮件地址-它们都符合 RFC 的 user@localhost。不过,根据用例 (web 窗体) 中,您可能希望将它们视为无效。

不仅这是有效的如 @zillion1 所说的但也像 bla@bla 被视为有效。实际上没有最佳的解决方案。

@NicholasTolleyCottrell 这是 Java,此处我们引发和捕获异常,确实没有看到您的点

我怀疑 InternetAddress 构造函数已被篡改。或者,我的系统已被篡改。或 RFC822 已被篡改。或者,我真的无法立即使用一些睡眠。但我只是尝试一些代码并将其传给 InternetAddress 构造函数中,如果所有通过为有效的电子邮件地址下面五个字符串,"很明显",它们是无效。我们开始吧︰ . .comcom.abc123此外,添加前导或尾随空白不会使失效字符串之一。您是法官 !

是的。test@example.com、 验证正常使用这种技术。不要使用。

后期的答案,但我认为它很简单而且值得︰

    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();
    }

测试用例:

enter image description here

为生产目的,应 network-wise 执行验证的域名。

这就是大部分的 RFC 规则以及 idn,则会忽略的 brutally 非常简单验证。我将掌控清除的这对任何生产质量的应用程序。

me@company.co.uk 将会无效。.

不滚动事项由 Rfc 自己基于正则表达式的验证的程序。

只要您不介意偶尔平面轮胎后尘没关系

其他答案中所述,可以使用 Apache 常规验证程序。

pom.xml 中︰

<dependency>
    <groupId>commons-validator</groupId>
    <artifactId>commons-validator</artifactId>
    <version>1.4.1</version>
</dependency>

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);

仅 apache 一些问题是能够像"ab 概览的电子邮件地址$# @gmail.com"。尽管此地址可能正当根据 RFC,它是由用户提供的输入可能不正确。

此解决方案应该是在最前面 !

在可以添加的 Android Studio 编译一些-验证程序︰ 一些-验证程序︰ 1.4.1' 到您应用程序 uild.gradle 依赖项 {}

实际上在尝试生成项目之后, 似乎 apache 一些不起作用与 Android 很好,数以百计的警告和某些错误,它不甚至编译。这是我使用howtodoinjava.com/2014/11/11/java-regex-validate-email-address的结束

截至 Benjiko99 与我同一个问题。后添加依赖项,项目不编译,说 java.exe 完成了非零退出代码 2。

如果您试图执行表单验证接收到来自客户端或只是 bean 验证-保持简单。它的更好的进行松散的电子邮件验证,而不是要做一个严格和拒绝某些人,(例如当他们尝试注册为您的 web 服务)。与几乎所有操作允许在电子邮件和这么多义每个月 (如.company、.entreprise、.estate) 正在增加的新域的用户名部分,是更安全,更不必严格︰

Pattern pattern = Pattern.compile("^.+@.+..+$");
Matcher matcher = pattern.matcher(email);

这是一个非常好的点,任何合理的应用程序应该有其他措施,以防止在此输入仍被利用下线

如何将其更改为"^。 + @。 + (。 [^.]+) + $"以避免一个尾随点吗?

请输入您的翻译

What is the best Java email address validation method?

确认取消