如何用正则表达式来验证Java中的电子邮件地址 您所在的位置:网站首页 邮箱地址格式校验 如何用正则表达式来验证Java中的电子邮件地址

如何用正则表达式来验证Java中的电子邮件地址

2023-10-04 17:13| 来源: 网络整理| 查看: 265

简介

**正则表达式(RegEx)**是一个强大的工具,它帮助我们以灵活、动态和高效的方式匹配模式,并根据结果执行操作。

在这个简短的指南中,我们将看看如何用正则表达式来验证Java中的电子邮件地址。

在Java中验证电子邮件地址

验证电子邮件地址并不难--在电子邮件世界中没有太多的多样性,不过,你有几种方法可以去做这件事。

正则表达式具有很强的表现力,所以你可以根据你想验证电子邮件的方式添加越来越多的约束条件,只需添加更多的匹配规则。

通常情况下,你可以把事情归结为一个相当简单的RegEx,它将适合大多数电子邮件地址模式。

你可以不考虑组织类型 (.com,.org,.edu)、主机 (gmail,yahoo,outlook),或电子邮件地址的其他部分,甚至可以强制执行它们。

在接下来的章节中,我们将看看一些不同的正则表达式,以及它们支持或拒绝哪些电子邮件格式。

通用的电子邮件正则表达式

一个通用的电子邮件格式是:

[email protected]

按照惯例,organizationtype 是3个字符 -edu,org,com, 等等。有相当多的主机,甚至是自定义的主机,所以实际上,这可能是任何字符序列 - 甚至是aaa 。

也就是说,对于相当宽松的验证(但仍然是完全有效的验证),我们可以检查字符串是否包含4组。

任何序列的字符 - 名字 @ 符号 任何字符序列--主机 任何3个字符的字母序列--组织类型

这就为我们提供了一个正则表达式,看起来像。

(.*)(@)(.*)(.[a-z]{3})

为了进一步确保它们完全不包含任何空白,我们可以添加一些\S 检查。

(\S.*\S)(@)(\S.*\S)(.\S[a-z]{3})

也就是说,要在Java中验证一个电子邮件地址,我们可以简单地使用Pattern 和Matcher 类。

String email = "[email protected]"; Pattern pattern = Pattern.compile("(\\S.*\\S)(@)(\\S.*\\S)(.\\S[a-z]{3})"); Matcher matcher = pattern.matcher(email); if (matcher.matches()) { System.out.println("Full email: " + matcher.group(0)); System.out.println("Username: " + matcher.group(1)); System.out.println("Hosting Service: " + matcher.group(3)); System.out.println("TLD: " + matcher.group(4)); }

这样做的结果是:

Full email: [email protected] Username: someone Hosting Service: gmail TLD: com

或者,你可以使用字符串类的内置matches() 方法(反正只是使用Pattern 和Matcher )。

String email = "[email protected]"; if(email.matches("(\\S.*\\S)(@)(\\S.*\\S)(.\\S[a-z]{3})")) { System.out.println(String.format("Email '%s' is valid!", email)); }

其结果是:

Email '[email protected]' is valid!

棒极了!这个通用的RegEx将处理几乎所有的通用输入,并将检查一封邮件是否遵循所有邮件都遵循的通用形式。

在大多数情况下,这将工作得很好,你不需要比这更多。你将无法用它来检测垃圾邮件,例如。

[email protected]

然而,你将强制执行某种形式。

**注意:**要强制执行某些主机或域名,只需将.* 和/或.[a-z]{3} 替换为实际值,如gmail 和.edu 。

强大的电子邮件验证RegEx

一个强大的电子邮件RegEx是什么样子的?有可能--你不会喜欢它,除非你喜欢看正则表达式,这并不是一个特别常见的爱好。

长话短说,这就是它的模样。

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=^_`{|}~-]+)* |"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f] |\\[\x01-\x09\x0b\x0c\x0e-\x7f])*") @ (?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])? |\[(?:(?:(2(5[0-5]|[0-4][0-9]) |1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9]) |1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f] |\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]) 改编的RegEx bybortzmeyer

这是符合RFC5322标准的正则表达式,涵盖了99.99%的输入电子邮件地址。

用文字来解释它通常是不可行的,但将它可视化会有很大的帮助。

*图片和声明由EmailRegex.com提供。

既然如此,为了在Java中创建一个真正强大的电子邮件验证正则表达式检查器,让我们用这个来代替松散的那个。

String email = "[email protected]"; Pattern pattern = Pattern.compile("(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])"); Matcher matcher = pattern.matcher(email); if (matcher.matches()) { System.out.println(String.format("Email '%s' is valid!", matcher.group(0))); }

不用说了--这就可以了。

Email '[email protected]' is valid!

这并不检查电子邮件是否存在(除非你尝试向该地址发送电子邮件,否则无法检查),所以你总是停留在这种可能性上。当然,即使是这个词组也会注意到奇怪的电子邮件地址,如::

[email protected]

...是完全有效的

总结

在这个简短的指南中,我们已经看了如何用正则表达式在Java中进行电子邮件验证。

任何形式的验证通常都取决于你的具体项目,但也有一些松散的/通用的形式,你可以执行和匹配。

我们已经建立了一个简单的通用形式,它在大多数情况下都能工作,然后是一个非常强大的正则表达式,如RFC5322所详述的。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有