Что именно представляет собой шаблон регулярных выражений, который использует валидатор Hibernate для @Email?

#hibernate-validator

Вопрос:

Версии:

 hibernate-validator: 6.2.0.Final (from mvnrepository.com)
 

При необходимости вы можете ознакомиться с соответствующими документами по адресу jboss.org.

Я обнаружил, что встроенный валидатор Hibernate (через @Email аннотацию) поддерживает проверку адресов электронной почты (то есть для строк, в которых должны содержаться действительные адреса электронной почты).

ВОПРОС: кто-нибудь знает регулярное выражение по умолчанию, которое использует для проверки валидатор Hibernate 6.2 @Email ?

Ответ №1:

Из исходного кода hibernate-валидатора:

  • Проверяет, является ли заданная последовательность символов (например, строка) правильно сформированным адресом электронной почты.
  • Спецификация действительного электронного письма можно найти в RFC 2822, и можно придумать регулярное выражение, соответствующее всем действительным адресам электронной почты в соответствии со спецификацией. Однако, как обсуждается в этой статье, не обязательно практично внедрять валидатор электронной почты, соответствующий 100% требованиям. Эта реализация является компромиссом, пытаясь соответствовать большинству электронных писем, игнорируя, например, электронные письма с двойными кавычками или комментариями.
 private static final int MAX_LOCAL_PART_LENGTH = 64;

private static final String LOCAL_PART_ATOM = "[a-z0-9!#$%amp;'* /=?^_`{|}~u0080-uFFFF-]";
private static final String LOCAL_PART_INSIDE_QUOTES_ATOM = "(?:[a-z0-9!#$%amp;'*.(),<>\[\]:;  @ /=?^_`{|}~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
);
 

См. также регулярное выражение для доменной части.