为什么在RFC 822/Apache-Commons验证下接受TLD作为域?
根据 Apache 文档,他们的电子邮件验证遵循 RFC 822 规范。
EmailValidator 根据 RFC 822 标准提供电子邮件地址验证。 来源
但是,在本地运行一些测试时,我发现某些 TLD 被接受为域。
test@test //invalid
[email protected] //valid
test@com //valid
test@comm //invalid
test@amsterdam //valid
test@brussels //valid
我想我在 RFC 中的某个地方读到
是一个有效的电子邮件地址,但强烈建议不要使用(..因此应该被视为无效?)。所以我知道 test@test
无效,但 test@amsterdam
有效,因为 .amsterdam
是有效的 gTLD。
不确定这是否是一个错误或者是否是有意为之。从他们的实现和文档来看,尚不清楚什么应该是有效的,以及它是否 100% 符合 RFC 822 规范。
class Test {
EmailValidator validator = EmailValidator.getInstance(false, true);
@ParameterizedTest
@ValueSource(strings = {
"test@test",
"[email protected]",
"test@com",
"test@comm",
"test@amsterdam",
"test@brussels"
})
void emails(String email) {
System.out.printf("%-20s valid? %s%n", email, validator.isValid(email));
}
}
我似乎也不明白 EmailValidator
构造函数执行以下操作
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我会说这是意图的。您可以通过提供提到的参数来调整验证。
根据禁止无点域。
作为参数的解释词:
allocal
- 将允许本地域,例如mail@someNotexistingtld
allow>
allowtld - 将允许顶级域,例如mail@com
要具有真正准确的RFC822验证,您需要将同时设置为
true
。但是在现实生活中,我会说,在大多数情况下,它们将被省略或设置为false
。I would say this is intended. You can adjust validation to your by providing parameters you've mentioned.
According to https://www.icann.org/en/announcements/details/new-gtld-dotless-domain-names-prohibited-30-8-2013-en dotless domains are prohibited.
And as a word of explanation for parameters:
allowLocal
- will allow local domains e.gmail@somenotexistingtld
allowTld
- will allow top level domains e.gmail@com
To have truly accurate RFC822 validation you need set both to
true
. But in real life scenario I would say that in most of the cases they will be omitted or set tofalse
.