Java邮箱验证方法有哪些?动力节点小编来告诉大家。
几乎每个有用户注册的应用程序都需要电子邮件验证。
电子邮件地址分为三个主要部分:本地部分、@符号和域。例如,如果“ username@domain.com ”是一封电子邮件,那么:
本地部分 = 用户名
@=@
域 = domain.com
通过字符串操作技术验证电子邮件地址可能需要花费大量精力,因为我们通常需要计算和检查所有字符类型和长度。但是在 Java 中,通过使用Java正则表达式,它会容易得多。
众所周知,正则表达式是用于匹配模式的字符序列。在以下部分中,我们将了解如何使用几种不同的正则表达式方法来执行电子邮件验证。
验证电子邮件地址的最简单的正则表达式是^(.+)@(S+) $。
它仅检查电子邮件地址中是否存在@符号。如果存在,则验证结果返回true,否则结果为false。但是,此正则表达式不会检查电子邮件的本地部分和域。
例如,根据这个正则表达式,username @domain.com 将通过验证,但username#domain.com将失败验证。
让我们定义一个简单的辅助方法来匹配正则表达式模式:
public static boolean patternMatches(String emailAddress, String regexPattern) {
return Pattern.compile(regexPattern)
.matcher(emailAddress)
.matches();
}
我们还将编写代码以使用此正则表达式验证电子邮件地址:
@Test
public void testUsingSimpleRegex() {
emailAddress = "username@domain.com";
regexPattern = "^(.+)@(\S+)$";
assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
}
电子邮件地址中缺少@符号也会导致验证失败。
现在让我们编写一个更严格的正则表达式来检查本地部分以及电子邮件的域部分:
^(?=.{1,64}@)[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+)*@[^-][A-Za- z0-9-]+(\.[A-Za-z0-9-]+)*(\.[A-Za-z]{2,})$
使用此正则表达式在电子邮件地址的本地部分施加以下限制:
它允许从 0 到 9 的数值。
允许从 a 到 z 的大写和小写字母。
允许使用下划线“_”、连字符“-”和点“.”
本地部分的开头和结尾不允许使用点。
不允许使用连续的点。
对于本地部分,最多允许 64 个字符。
此正则表达式中域部分的限制包括:
它允许从 0 到 9 的数值。
我们允许从 a 到 z 的大写和小写字母。
连字符“-”和点“.” 不允许在域部分的开头和结尾。
没有连续的点。
我们还将编写代码来测试这个正则表达式:
@Test
public void testUsingStrictRegex() {
emailAddress = "username@domain.com";
regexPattern = "^(?=.{1,64}@)[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+)*@"
+ "[^-][A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*(\.[A-Za-z]{2,})$";
assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
}
因此,通过这种电子邮件验证技术有效的一些电子邮件地址是:
用户名@domain.com
用户名@domain.com
用户名@domain.com
用户名@domain.co.in
用户名@domain.com
以下是通过此电子邮件验证无效的一些电子邮件地址的候选名单:
用户名.@domain.com
.user.name@domain.com
用户名@domain.com。
用户名@.com
正则表达式适用于用英语编写的电子邮件地址,但不适用于非拉丁语电子邮件地址。
所以我们将编写一个正则表达式,我们也可以使用它来验证 unicode 字符:
^(?=.{1,64}@)[\p{L}0-9_-]+(\.[\p{L}0-9_-]+)*@[^-][ \p{L}0-9-]+(\.[\p{L}0-9-]+)*(\.[\p{L}]{2,})$
我们可以使用此正则表达式来验证 Unicode 或非拉丁电子邮件地址以支持所有语言。
让我们通过编写测试来检查这个正则表达式:
@Test
public void testUsingUnicodeRegex() {
emailAddress = "用户名@领域.电脑";
regexPattern = "^(?=.{1,64}@)[\p{L}0-9_-]+(\.[\p{L}0-9_-]+)*@"
+ "[^-][\p{L}0-9-]+(\.[\p{L}0-9-]+)*(\.[\p{L}]{2,})$";
assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
}
此正则表达式不仅提供了一种更严格的电子邮件地址验证方法,而且还支持非拉丁字符。
我们可以使用 RFC 标准提供的,而不是编写自定义正则表达式来验证电子邮件地址。
RFC 5322是RFC 822的更新版本,为电子邮件验证提供了正则表达式。
让我们来看看:
^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^.-] +@ [a-zA-Z0-9.-]+$
正如我们所看到的,这是一个非常简单的正则表达式,它允许电子邮件中的所有字符。
但是,它不允许使用竖线字符 (|) 和单引号 ('),因为它们在从客户端站点传递到服务器时存在潜在的SQL 注入风险。
让我们编写代码以使用此正则表达式验证电子邮件:
@Test
public void testUsingRFC5322Regex() {
emailAddress = "username@domain.com";
regexPattern = "^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^.-]+@[a-zA-Z0-9.-]+$";
assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
}
我们编写了正则表达式来验证电子邮件地址的本地和域部分。现在我们还将编写一个正则表达式来检查电子邮件的顶级域。
以下正则表达式验证电子邮件地址的顶级域部分:
^[\w!#$%&'*+/=?`{|}~^-]+(?:\.[\w!#$%&'*+/=?`{|} ~^-]+)*@(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,6}$
此正则表达式主要检查电子邮件地址是否只有一个点,以及顶级域中是否存在最少两个和最多六个字符。
我们还将编写一些代码来使用这个正则表达式来验证电子邮件地址:
@Test
public void testTopLevelDomain() {
emailAddress = "username@domain.com";
regexPattern = "^[\w!#$%&'*+/=?`{|}~^-]+(?:\.[\w!#$%&'*+/=?`{|}~^-]+)*"
+ "@(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,6}$";
assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
}
现在让我们编写一个正则表达式来限制电子邮件地址中点的使用:
^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+(?:\.[a-zA-Z0-9_!#$%&'* +/=?`{|}~^-]+)*@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$
上面的正则表达式用于限制连续点、前导点和尾随点。因此,一封电子邮件可以包含多个点,但在本地和域部分中不连续。
让我们看一下代码:
@Test
public void testRestrictDots() {
emailAddress = "username@domain.com";
regexPattern = "^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+(?:\.[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+)*@"
+ "[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$";
assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
}
此正则表达式由OWASP 验证正则表达式存储库提供,用于检查电子邮件验证:
^[a-zA-Z0-9_+&*-] + (?:\.[a-zA-Z0-9_+&*-] + )*@(?:[a-zA-Z0-9- ]+\.) + [a-zA-Z]{2, 7}
此正则表达式还支持标准电子邮件结构中的大多数验证。
让我们使用以下代码验证电子邮件地址:
@Test
public void testOwaspValidation() {
emailAddress = "username@domain.com";
regexPattern = "^[a-zA-Z0-9_+&*-]+(?:\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,7}$";
assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
}
有一种特殊情况仅适用于 Gmail 域:允许在电子邮件的本地部分使用字符 + 字符。对于 Gmail 域,两个电子邮件地址username+something@gmail.com和username@gmail.com是相同的。
此外,username @gmail.com类似于user+name@gmail.com。
我们必须实现一个稍微不同的正则表达式,它也将通过这种特殊情况的电子邮件验证:
^(?=.{1,64}@)[A-Za-z0-9_-+]+(\.[A-Za-z0-9_-+]+)*@[^-][A- Za-z0-9-+]+(\.[A-Za-z0-9-+]+)*(\.[A-Za-z]{2,})$
让我们写一个例子来测试这个用例:
@Test
public void testGmailSpecialCase() {
emailAddress = "username+something@domain.com";
regexPattern = "^(?=.{1,64}@)[A-Za-z0-9\+_-]+(\.[A-Za-z0-9\+_-]+)*@"
+ "[^-][A-Za-z0-9\+-]+(\.[A-Za-z0-9\+-]+)*(\.[A-Za-z]{2,})$";
assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
}
Apache Commons Validator是一个包含标准验证规则的验证包。所以通过导入这个包,我们可以应用电子邮件验证。
我们可以使用EmailValidator类来验证电子邮件,它使用 RFC 822 标准。此验证器包含用于验证电子邮件的自定义代码和正则表达式的混合。它不仅支持特殊字符,还支持我们讨论过的 Unicode 字符。
让我们在项目中添加commons-validator依赖项:
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>${validator.version}</version>
</dependency>
现在我们可以使用以下代码验证电子邮件地址:
@Test
public void testUsingEmailValidator() {
emailAddress = "username@domain.com";
assertTrue(EmailValidator.getInstance()
.isValid(emailAddress));
}
以上就是关于“Java邮箱验证方法”的介绍,大家如果对此比较感兴趣,想了解更多相关知识,可以关注一下动力节点的Java在线学习,里面的课程内容从入门到精通,细致全面,通俗易懂,适合没有基础的小伙伴学习,希望对大家能够有所帮助。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习