【问题标题】:apache common validator returns false positive resultapache 通用验证器返回误报结果
【发布时间】:2019-06-25 11:57:46
【问题描述】:

在使用 Apache 通用电子邮件验证器时,如下链接:

https://commons.apache.org/proper/commons-validator/apidocs/org/apache/commons/validator/routines/EmailValidator.html

它返回格式为:的电子邮件的误报结果:

random@.com -> true
random.bla@gmail -> true

有没有更好的方法来验证电子邮件?

【问题讨论】:

    标签: java apache-commons email-validation


    【解决方案1】:

    我认为您在代码中的某个地方犯了错误,我测试了 EmailValidator 并且它有效,两个示例都返回 false:

    import org.apache.commons.validator.routines.EmailValidator;
    
    public class TestMail {
    
    public static void main(String[] args) {
    
        EmailValidator v = EmailValidator.getInstance();
    
        System.out.println(v.isValid("random@.com")); //false
        System.out.println(v.isValid("random.bla@gmail")); //false
    }
    }
    

    使用依赖:

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

    【讨论】:

    • 当前版本好像是 1.6。 1.4.0 于 12 年 1 月发布。
    【解决方案2】:

    对于“静态验证”,只有最新的 commons-validator 版本可以帮助/改进

    见:What is the best Java email address validation method?


    如果您真的想要验证电子邮件 - 当然需要确认:

    • 首先进行静态验证(尽可能好)
    • 然后发送电子邮件:
      • 带有识别确认链接,收件人必须“点击”(http 获取!)。
    • 编写相应的端点/servlet/controller (http get),“完成验证”。

    另见:https://en.wikipedia.org/wiki/Closed-loop_authentication ...


    【讨论】:

    • 这个答案很难真正阅读。我的意思是它是正确的,但它需要四次通读才能弄清楚。
    • ty,@RoddyoftheFrozenPeas,对不起,这是一个“广阔的领域”:) ..英语不是我的母语 :)
    • ..已编辑! (更多的结构,更少的括号 + refs ;)
    【解决方案3】:

    当电子邮件地址有 & char 但不是真的时,Apache 通用电子邮件验证器有效。

            assertFalse(EmailValidatorUtil.isValid("asdfasd&@hotmail.com"));
    

    【讨论】:

      猜你喜欢
      • 2019-01-15
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-20
      相关资源
      最近更新 更多