HTML5输入电子邮件验证的Java实现是否存在?

9
我想使用新的 <input type="email" /> 元素。我希望有Java代码能够在服务器上实现与浏览器中发生的相同验证。
HTML5规范在此处定义了电子邮件地址,并使用ABNF进行了说明。
1*( atext / "." ) "@" ldh-str *( "." ldh-str )

where:

<ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>

<let-dig-hyp> ::= <let-dig> | "-"

<let-dig> ::= <letter> | <digit>

<letter> ::= any one of the 52 alphabetic characters A through Z in upper case and a through z in lower case

<digit> ::= any one of the ten digits 0 through 9

and:


atext           =   ALPHA / DIGIT /    ; Printable US-ASCII
                       "!" / "#" /        ;  characters not including
                       "$" / "%" /        ;  specials.  Used for atoms.
                       "&" / "'" /
                       "*" / "+" /
                       "-" / "/" /
                       "=" / "?" /
                       "^" / "_" /
                       "`" / "{" /
                       "|" / "}" /
                       "~"

这些规则与RFC 5322中的规则不同。

我该如何在Java中测试地址是否符合这些规则?

谢谢!


我不知道是否存在现成的解决方案,但如果您找不到任何解决方案,您可以使用PEP相当容易地创建一个。http://www.ling.ohio-state.edu/~scott/ - biziclop
2个回答

6
你可以使用正则表达式:
[A-Za-z0-9!#$%&'*+-/=?^_`{|}~]+@[A-Za-z0-9-]+(.[A-Za-z0-9-]+)*

。这个正则表达式可以用来匹配电子邮件地址。

user@domain 通过验证。你不需要在 @ 后面加上一个点吗? - Adam
@Adam:这是你定义的意思。回答你的问题,严格来说,不是。 - SLaks
我的错。在ABNF中,*表示包括0。 - Adam
1
可能是为了支持(非常少数的)顶级域名管理员,他们的地址类似于“me@com”。 - ide
@ide:或者针对具有非公共域的内部邮件服务器。 - SLaks

2
实际上,您引用的W3C推荐提供了一个正则表达式,作为他们所呈现的ABNF的等效项,该ABNF定义了有效的电子邮件地址:
/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/

但是这个正则表达式匹配无效的电子邮件地址,例如".any..address.@123"(使用https://regex101.com/进行测试)。
这个正则表达式接受以下在电子邮件地址中都是无效的内容(根据Wikipedia):
- 本地部分开头的"."(点) - 本地部分结尾的"."(点) - 本地部分中多个连续的"."(点) - 域名部分只有数字
而拒绝以下在电子邮件地址中都是有效的内容(根据Wikipedia):
- Unicode字符 - 一些用引号(")括起来的特殊字符
请注意,W3C声明他们提出的规范是故意违反 RFC 5322的,因此他们有一个“借口”可以省略有效情况,但我认为这不是接受无效地址的理由。
如果您不关心这些特殊情况,您可以使用W3C建议的正则表达式。否则,您应该调整正则表达式以涵盖您想处理的情况。

它没有像在punycode版本上执行的那样拒绝所有非ASCII字符,因此example@яндекс.рф首先会被转换为example@xn--d1acpjx3f.xn--p1ai,这是可以通过的。但是,在@之前带有非ASCII字符的有效电子邮件地址将被拒绝。 - Jon Hanna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接