Проверка IsMultibyte относится к группе валидаторов, работающих со строками и анализирующих их байтовое представление. Основное назначение — определить, содержит ли строка многобайтовые символы, то есть символы, выходящие за пределы стандартного ASCII-набора.
Данный валидатор используется через декоратор из библиотеки class-validator и опирается на реализацию из validator.js, где функция isMultibyte выполняет проверку строки на наличие хотя бы одного символа, требующего более одного байта для кодирования.
Многобайтовые символы встречаются в различных языках и системах письма: кириллица, иероглифы, символы с диакритикой, эмодзи и другие расширенные наборы Unicode. Проверка позволяет:
Логика проверки строится на анализе строки:
Важно учитывать, что валидатор не интерпретирует семантику текста. Он работает исключительно на уровне байтового представления символов.
Декоратор не принимает дополнительных параметров, кроме стандартных опций валидации class-validator:
Базовое использование не требует конфигурации, так как проверка бинарная: соответствует или не соответствует условию.
Использование проверки встречается в следующих случаях:
import { IsMultibyte } from 'class-validator';
export class CreateProfileDto {
@IsMultibyte()
displayName: string;
}
В данном случае поле displayName должно содержать хотя
бы один символ, выходящий за пределы ASCII. Строка "John"
не пройдёт проверку, тогда как "Иван" или
"山田" будет считаться валидной.
import { IsMultibyte, IsNotEmpty } from 'class-validator';
export class UpdateCommentDto {
@IsNotEmpty()
@IsMultibyte()
text: string;
}
Здесь комбинируется проверка на пустую строку и требование наличия многобайтовых символов, что может использоваться для систем, ориентированных на локализованный контент.
В архитектуре NestJS валидаторы применяются на уровне DTO-классов. IsMultibyte становится частью цепочки проверки входящих данных:
import { IsMultibyte, Length } from 'class-validator';
export class MessageDto {
@Length(1, 200)
@IsMultibyte()
content: string;
}
Валидация выполняется автоматически при использовании ValidationPipe, что позволяет отсеивать некорректные запросы до попадания в бизнес-логику приложения.
IsMultibyte редко используется изолированно. Чаще он включается в набор правил:
@IsString() — проверка типа;@Length() — ограничение длины;@Matches() — проверка регулярных выражений;@IsOptional() — условное применение валидации.Комбинация позволяет строить точные правила ввода, например:
import { IsString, IsMultibyte, Length, Matches } from 'class-validator';
export class LocalizedTitleDto {
@IsString()
@IsMultibyte()
@Length(3, 100)
@Matches(/^[^0-9]*$/)
title: string;
}
Такой набор ограничивает использование цифр и одновременно требует наличие многобайтовых символов.
Поведение по умолчанию можно переопределить через опцию сообщения:
@IsMultibyte({ message: 'Поле должно содержать символы Unicode' })
name: string;
Сообщение формируется при провале проверки и может использоваться системой интернационализации.
При использовании IsMultibyte необходимо учитывать ряд особенностей:
Также следует учитывать, что валидатор не анализирует язык или смысл текста, а только его байтовую структуру, что может приводить к ложным трактовкам в бизнес-логике, если использовать его не по назначению.