Декоратор @IsEmail в библиотеке
class-validator предназначен для проверки строковых
значений на соответствие формату адреса электронной почты. Проверка
основана на синтаксических правилах RFC и включает валидацию локальной
части, домена и допустимых символов.
Ключевая особенность декоратора заключается в том, что он работает на уровне метаданных класса и интегрируется с системой валидации объектов, позволяя декларативно описывать правила проверки данных.
Минимальная форма применения ограничивается указанием декоратора без параметров:
import { IsEmail } from "class-validator";
export class CreateUserDto {
@IsEmail()
email: string;
}
В этом случае используется стандартный набор правил проверки
email-адреса. Значение должно содержать символ @,
корректный домен и допустимую локальную часть.
При валидации выполняется последовательность проверок:
@ и разделение строки на локальную и
доменную части;Важно: @IsEmail не гарантирует
существование почтового ящика, проверяется только формат строки.
Декоратор принимает объект опций, позволяющий гибко управлять правилами проверки.
@IsEmail(options?: IsEmailOptions)
Позволяет использовать отображаемое имя перед адресом.
@IsEmail({ allow_display_name: true })
email: string;
Примеры допустимых значений:
John Doe <john@example.com>Support <support@mail.com>При включении параметра парсер извлекает email из строки с отображаемым именем.
Обязывает наличие отображаемого имени.
@IsEmail({ require_display_name: true })
email: string;
Строка без имени будет считаться невалидной.
Разрешает использование UTF-8 символов в локальной части адреса.
@IsEmail({ allow_utf8_local_part: true })
email: string;
Пример допустимого значения:
пользователь@domain.comБез включения этой опции такие значения считаются некорректными.
Определяет обязательность наличия верхнеуровневого домена.
@IsEmail({ require_tld: true })
email: string;
При значении false допускаются адреса вида:
user@localhostПри значении true подобные адреса отклоняются.
Отключает проверку максимальной длины email-строки.
@IsEmail({ ignore_max_length: true })
email: string;
По умолчанию действует ограничение длины в соответствии с RFC-стандартами (обычно 254 символа).
Включает более строгую проверку доменной части с учётом особенностей популярных почтовых провайдеров.
@IsEmail({ domain_specific_validation: true })
email: string;
При включении усиливается проверка корректности домена и поддоменов.
Позволяет указать набор запрещённых символов.
@IsEmail({ blacklisted_chars: "<>\" " })
email: string;
Если в строке присутствует хотя бы один символ из списка, значение считается невалидным.
Комбинация нескольких опций позволяет реализовать строгую валидацию:
import { IsEmail } from "class-validator";
export class RegisterDto {
@IsEmail({
allow_utf8_local_part: true,
require_tld: true,
ignore_max_length: false,
domain_specific_validation: true,
})
email: string;
}
В данном случае проверка становится более строгой и учитывает как синтаксис, так и практическую корректность доменной части.
class-validator работает с уже созданными объектами
классов. Поэтому важна предварительная трансформация входных данных:
import { plainToInstance } from "class-transformer";
import { validate } from "class-validator";
const input = {
email: "user@example.com",
};
const dto = plainToInstance(CreateUserDto, input);
validate(dto).then(errors => {
console.log(errors);
});
Без преобразования декораторы могут не сработать корректно, так как отсутствуют метаданные класса.
Email-валидатор автоматически обрабатывает:
allow_display_name;Однако избыточное форматирование строки может привести к отклонению значения, особенно при строгих настройках.
Несмотря на широкий набор правил, декоратор имеет принципиальные ограничения:
@IsEmail часто используется совместно с другими
валидаторами:
import { IsEmail, IsNotEmpty, MaxLength } from "class-validator";
export class UserDto {
@IsNotEmpty()
@MaxLength(254)
@IsEmail()
email: string;
}
Такой подход позволяет усилить контроль над входными данными за счёт комбинирования правил.
При несоответствии формату возвращается объект ошибки с метаданными:
{
"property": "email",
"constraints": {
"isEmail": "email must be an email"
}
}
Сообщение может быть переопределено через систему локализации или кастомные сообщения валидатора.
Валидация email-строк относится к лёгким операциям, однако при массовой обработке данных следует учитывать:
При стандартных сценариях нагрузка минимальна и не требует оптимизации.