java8/11+验证电子邮件地址语法w/o模式?

bxgwgixi  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(386)

这个问题在这里已经有答案了

java正则表达式电子邮件(21个答案)
什么是最好的java电子邮件地址验证方法[关闭](19个答案)
用java验证电子邮件(4个答案)
上个月关门了。
我知道这个问题的答案至少和电子邮件的rfc一样多,而且我对这个问题有自己的答案,我想把它“放到世界上”作为反馈。我的应用程序应该如何确保任意字符串只包含一个有效的电子邮件地址?
为了避免愚蠢的争论,我们假设扫描的文本必须少于1kb。
支持任何特定库而不是普通Java8/11+的人应该解释是哪个库以及为什么。
我认为有效的电子邮件地址示例: äöüëèéê@xkcd.com ```
// "valid" means worth attempting to send welcome message
static boolean isValidEmailAddress(String notNull);

yqhsw0fo

yqhsw0fo1#

简单的问题和复杂的答案;搜索堆栈溢出产生了许多争论和实用知识。
然而,我有一个精辟的反驳:你是否考虑过发一个信息,看看谁会回信?其他:
首先,施加任何长度限制和任何您喜欢的显式允许/阻止列表。
下一步,考虑 jakarta.mail 只要您使用的是Java8或更新版本。
完全避免regex,但如果必须这样做,则可以:

private static final String NLP = Pattern.compile("[\\p{Alnum}\\p{Punct}&&[^@]]+").pattern();
    private static final Pattern VALID_ENOUGH_EMAIL_ADDRESS =
                Pattern.compile(String.join("@", NLP, NLP), Pattern.UNICODE_CHARACTER_CLASS);

在普通英语中:“任何数字、字母或标点符号,除了字面意义 @ ,至少一次“在一个文本的任一侧” @ .

脚印:

这个库声称实现rfc822,它已经被取代。两次。而且,可能会一次又一次。
https://eclipse-ee4j.github.io/mail/

public static void boolean isValidEmailAddress(String notNull) {
    // impose whatever extra pre-flight check you like on ^^^
    try {
        new InternetAddress(notNull, true); // v2.0.0 works w/ Unicode
        return true;
    } catch (AddressException e) {
        // log or recover however you want
        return false;
    }
}

注意,这可能会接受不是大多数系统识别的单一有效电子邮件地址的消息;如果您的系统有独特的要求,请参阅这些要求。如果没有,您可以使用java/spring验证注解 @Email 使用正确的模式,而不是编写与emoji和umlauts有关的自己的实现,谁知道2020年及以后还会发生什么。
https://en.wikipedia.org/wiki/international_email
fwiw:我出生在80年代之后,但我听说电子邮件在那之前并不少见。我的$0.02

相关问题