В библиотеке Ajv проверка строковых форматов реализуется через
ключевое слово format, входящее в спецификацию JSON Schema.
Форматы применяются поверх базовых типов и позволяют задавать
семантические ограничения: корректность email-адресов, URI, временных
меток и других структурированных строк.
Механизм форматной проверки в Ajv не является частью ядра строгой
спецификации JSON Schema Draft-07/2019-09/2020-12 в виде обязательной
логики исполнения. Поддержка форматов подключается отдельно и может быть
расширена через плагины, наиболее распространённый из которых —
ajv-formats.
Базовая конфигурация Ajv не всегда включает полный набор валидаторов форматов. Для расширенной поддержки используется пакет форматов:
import Ajv from "ajv";
import addFormats from "ajv-formats";
const ajv = new Ajv();
addFormats(ajv);
После подключения становятся доступными проверки email,
uri, date-time и другие.
Формат email используется для проверки строк,
соответствующих синтаксису электронных адресов согласно RFC 5322 (с
упрощениями на практике).
{
"type": "object",
"properties": {
"email": {
"type": "string",
"format": "email"
}
},
"required": ["email"]
}
const schema = {
type: "object",
properties: {
email: { type: "string", format: "email" }
},
required: ["email"]
};
const validate = ajv.compile(schema);
validate({ email: "test@example.com" }); // true
validate({ email: "invalid-email" }); // false
Форматная проверка email в Ajv ориентирована на синтаксическую корректность:
@При этом не выполняется проверка существования домена или почтового ящика, так как это выходит за пределы JSON Schema.
Формат uri применяется для проверки унифицированных
идентификаторов ресурсов.
URI включает схемы http, https,
ftp, mailto и другие согласно RFC 3986.
{
"type": "object",
"properties": {
"website": {
"type": "string",
"format": "uri"
}
}
}
const schema = {
type: "object",
properties: {
website: { type: "string", format: "uri" }
}
};
const validate = ajv.compile(schema);
validate({ website: "https://example.com" }); // true
validate({ website: "not a url" }); // false
Формат uri в Ajv учитывает:
http://, https://)Не выполняется сетевое разрешение адреса и проверка доступности ресурса.
Формат date-time предназначен для проверки строк,
соответствующих стандарту ISO 8601.
Типичный пример:
2026-05-10T14:30:00Z
{
"type": "object",
"properties": {
"createdAt": {
"type": "string",
"format": "date-time"
}
}
}
const schema = {
type: "object",
properties: {
createdAt: { type: "string", format: "date-time" }
}
};
const validate = ajv.compile(schema);
validate({ createdAt: "2026-05-10T14:30:00Z" }); // true
validate({ createdAt: "10-05-2026" }); // false
В Ajv проверка учитывает строгую структуру ISO 8601:
TZ или смещение
+hh:mm)Допустимые варианты:
2026-05-10T14:30:00Z2026-05-10T14:30:00+05:002026-05-10T14:30:00.123ZНедопустимые варианты:
2026/05/10 14:3010-05-20262026-05-10Форматы в Ajv могут работать в нескольких режимах:
Форматная проверка не заменяет базовую типизацию JSON Schema.
Комбинация type + format обеспечивает более
точное ограничение данных:
{
"type": "string",
"format": "email",
"minLength": 5,
"maxLength": 254
}
Ajv позволяет добавлять собственные форматы:
ajv.addFormat("even-number", {
type: "number",
validate: (n) => n % 2 === 0
});
Использование:
{
"type": "number",
"format": "even-number"
}
Этот механизм работает аналогично встроенным форматам
email, uri, date-time, расширяя
систему проверки без изменения схемы JSON Schema.
Форматы в Ajv выполняют функцию семантического слоя поверх синтаксической валидации. Их использование позволяет:
Комбинация стандартных форматов обеспечивает базовый набор правил для большинства прикладных API: идентификация пользователей (email), навигация (uri), временные метки (date-time).