Валидация email в Joi строится на базовом типе строки с применением
метода email(). Основная задача проверки — соответствие
формату RFC и контроль допустимых доменных структур.
const schema = Joi.object({
email: Joi.string().email()
});
Метод email() поддерживает расширенные параметры,
влияющие на строгость проверки:
Пример более строгой конфигурации:
const schema = Joi.object({
email: Joi.string().email({
minDomainSegments: 2,
tlds: { allow: ['com', 'net', 'org'] }
})
});
При проверке учитываются базовые требования к структуре адреса:
наличие локальной части, символа @ и корректного доменного
имени. При включённой фильтрации TLD ограничивается список допустимых
доменных зон, что полезно в корпоративных системах.
Проверка URI выполняется через метод uri(),
предназначенный для валидации URL-адресов и универсальных
идентификаторов ресурсов. Основная задача — контроль схемы, структуры и
допустимых символов.
const schema = Joi.object({
website: Joi.string().uri()
});
Валидация охватывает такие элементы, как:
http, https, ftp)#fragment)Расширенные настройки позволяют ограничивать допустимые схемы:
const schema = Joi.object({
website: Joi.string().uri({
scheme: ['http', 'https']
})
});
Дополнительно может применяться разрешение относительных путей:
const schema = Joi.object({
path: Joi.string().uri({
allowRelative: true
})
});
Такой режим полезен при валидации маршрутов внутри приложений, где не требуется полный URL.
При проверке URI Joi анализирует синтаксическую корректность, а не доступность ресурса. Это означает, что адрес может быть валидным по структуре, но не существовать в сети.
Валидация hostname осуществляется через метод
hostname(), который проверяет соответствие строки правилам
именования хостов в сетевых системах.
const schema = Joi.object({
host: Joi.string().hostname()
});
Hostname должен соответствовать следующим базовым требованиям:
Пример корректных значений:
example.comapi.service.localsub-domain.example.orgJoi также поддерживает дополнительные ограничения, связанные с форматом доменов верхнего уровня:
const schema = Joi.object({
host: Joi.string().hostname({
tlds: { allow: ['com', 'net', 'org'] }
})
});
При необходимости может использоваться более строгая проверка, исключающая локальные или служебные домены.
Hostname-валидация часто применяется совместно с проверкой URI, когда требуется отделить доменную часть от полного адреса ресурса.