Hibernate 验证器为@Email 使用的正则表达式模式到底是啥?
Posted
技术标签:
【中文标题】Hibernate 验证器为@Email 使用的正则表达式模式到底是啥?【英文标题】:What precisely is the regex pattern that Hibernate validator employes for @Email?Hibernate 验证器为@Email 使用的正则表达式模式到底是什么? 【发布时间】:2021-09-21 04:07:44 【问题描述】:版本:
hibernate-validator: 6.2.0.Final (from mvnrepository.com)
如果需要,您可以细读relevant docs at jboss.org。
我发现 Hibernate 验证器开箱即用(通过 @Email
注释)支持验证电子邮件地址(即,对于应该包含有效电子邮件地址的字符串)。
问题:有人知道 Hibernate Validator 6.2 用于@Email
验证的默认正则表达式吗?
【问题讨论】:
【参考方案1】:来自hibernate-validator source code:
检查给定的字符序列(例如字符串)是否是格式正确的电子邮件地址。 有效电子邮件的规范可以在RFC 2822 中找到,并且可以根据规范提出与 all valid email addresses 匹配的正则表达式。然而,正如article 所讨论的那样,实现 100% 兼容的电子邮件验证器并不一定可行。这种实现是一种权衡,试图匹配大多数电子邮件,同时忽略例如带有双引号或 cmets 的电子邮件。
private static final int MAX_LOCAL_PART_LENGTH = 64;
private static final String LOCAL_PART_ATOM = "[a-z0-9!#$%&'*+/=?^_`|~\u0080-\uFFFF-]";
private static final String LOCAL_PART_INSIDE_QUOTES_ATOM = "(?:[a-z0-9!#$%&'*.(),<>\\[\\]:; @+/=?^_`|~\u0080-\uFFFF-]|\\\\\\\\|\\\\\\\")";
/**
* Regular expression for the local part of an email address (everything before '@')
*/
private static final Pattern LOCAL_PART_PATTERN = Pattern.compile(
"(?:" + LOCAL_PART_ATOM + "+|\"" + LOCAL_PART_INSIDE_QUOTES_ATOM + "+\")" +
"(?:\\." + "(?:" + LOCAL_PART_ATOM + "+|\"" + LOCAL_PART_INSIDE_QUOTES_ATOM + "+\")" + ")*", CASE_INSENSITIVE
);
另见the regex for the domain part。
【讨论】:
以上是关于Hibernate 验证器为@Email 使用的正则表达式模式到底是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Matlab编制程序验证一个正整数能否可以表示为多个连续的正整数之和