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 使用的正则表达式模式到底是啥?的主要内容,如果未能解决你的问题,请参考以下文章

JS验证,写一个大于等于0的正整数,允许为小数。求教

验证非零的正整数

如何在 Hibernate 中为某些实体禁用模式验证?

Matlab编制程序验证一个正整数能否可以表示为多个连续的正整数之和

SpringBoot项目使用Hibernate Validator进行表单验证

Hibernate、MySQL 视图和 hibernate.hbm2ddl.auto = 验证