Те, що дата записана у схемі JSON, не означає, що валідатор повинен перевіряти дату.

У схемі написано `format: date`, але неправильна дата проходить перевірку. Це не обов'язково може означати, що в бібліотеці є помилка. Спосіб обробки `format` залежить від конфігурації валідатора. Коли ви отримуєте «перевірку успішно», спочатку запитайте, чи перевірено тип, структуру чи також перевірено семантику дати.

format: date записаний у схемі JSON, але неіснуюча дата проходить перевірку. Зазвичай це не помилка в бібліотеці. Спосіб обробки format залежить від конфігурації валідатора. Коли ви натрапите на результат «перевірка успішна», вам слід спочатку перевірити, чи перевіряється тип, структура чи семантика дати.

Ця стаття підходить для розробників і рецензентів, яким потрібно виконати структуровану перевірку даних документів і піклуються про точність полів дати. Прочитавши це, ви зможете визначити, що означає проходження перевірки, і використовувати контрприклад тестування, щоб виправити правила дат.

У цій статті використовуються синтетичні зразки для демонстрації методу обробки. Код було перевірено з прикладами в ізольованому середовищі, і це не є гарантією всіх реальних файлів або продуктивності продукту. Перед обробкою важливих документів збережіть оригінали та перегляньте їх відповідно до меж і пунктів прийняття в тексті.

Що саме перевіряє перевірка дати схеми JSON? Висновок одним реченням

Спочатку перевірте, чи ввімкнено перевірку format у валідаторі, а потім перевірте, чи семантичні правила дати (чи вона насправді існує та як її інтерпретувати) є іншим відповідальним.

ваша ситуаціяРекомендовані практикипричина
Перевірте лише format: date за допомогою валідатора за замовчуваннямСпочатку переконайтеся, що FormatChecker явно ввімкненоСпосіб обробки format залежить від конфігурації валідатора
Необхідно визначити такі дати, як 2026-02-30Додайте його в тестовий набір як контрприкладРядок виглядає як дата, що не означає, що він існує в календарі.
Порядок числа і місяця вихідної дати невідомий.Позначте неоднозначність, без автоматичного вгадуванняПеревірка date може лише показати, що перетворене значення дійсне
Поля з часом і часовим поясомВикористовуйте незалежні протоколи часуПерші десять символів не слід перехоплювати та обробляти випадково
Використовується для перевірки дати перекладуЗбережіть як raw_text, так і нормалізовані значенняРецензенти повинні бачити як оригінальний вміст, так і систематичне пояснення

Дві, здавалося б, ідентичні перевірки

2026-02-30 є рядком і виглядає як дата, але немає 30-го числа лютого. Тільки перевірка правильних форм дозволить пропустити цю проблему. Нижче використовується jsonschema Python для порівняння результатів валідатора за замовчуванням і явного ввімкнення FormatChecker.

Перевірте конфігурацію з неможливою датою

from jsonschema import Draft202012Validator, FormatChecker

schema = {"type": "string", "format": "date"}
structural = Draft202012Validator(schema)
strict = Draft202012Validator(schema, format_checker=FormatChecker())

def valid(v, value):
    return not list(v.iter_errors(value))

assert valid(structural, "2026-02-30")
assert not valid(strict, "2026-02-30")
assert valid(strict, "2024-02-29")
assert not valid(strict, "2025-02-29")
assert not valid(strict, "26/09/2026")
assert not valid(strict, 20260926)

Синтетичний приклад лише перевіряє date. Інші формати можуть мати необов’язкові залежності або відмінності в реалізації, і їх слід тестувати в кожному окремому випадку в заблокованому середовищі. Назви невідомого формату не можуть означати, що була реалізована певна перевірка, а орфографічні помилки можуть дати вам відчуття безглуздої безпеки.

Формат дати не є правилом інтерпретації дати

03/04/2026 у джерелі може означати 4 березня, а може означати 3 квітня. Вихідний регіон, специфікація поля або явний протокол необхідні перед перетворенням у форму ISO. Перевірка date може лише підтвердити, що конвертоване значення дійсне, але не може підтвердити, що ви вибрали правильний місяць.

Вихідна інформаціящо робитиЧого не варто робити
Календарна дата, якої не існуєПовідомити про помилку та переглянути джерелоАвтоматично перейти до наступного місяця
Невідомий порядок сонця і місяцяНеоднозначність тегівПрипустіть на основі мови сервера
З часом і часовим поясомВикористовуйте незалежні протоколи часуВипадково перехопити перші десять символів
Поле порожнєЛікувати відповідно до відсутніх правилДоповніть сьогоднішню дату

Включіть конфігурацію в регресійне тестування

Помістіть принаймні три типи значень у тестовий набір: законний високосний день, недопустимий високосний день і неправильне значення. Запуск цих контрприкладів під час розгортання ефективніший, ніж просто перевірка наявності файлу схеми. Якщо послугу реалізовано різними мовами, той самий набір тестів слід перевіряти окремо, і не припускайте, що поведінка двох валідаторів за замовчуванням однакова.

Перегляд перекладу зберігає оригінальну дату

При використанні результатів вилучення дати для перевірки перекладу OmniDoc рекомендується зберігати як raw_text, так і нормалізовані значення. Рецензент повинен побачити, «що таке оригінальний вміст» і «як система його інтерпретує», щоб визначити, чи полягає різниця в перекладі, вилученні чи перетворенні формату.

Джерела: Рядок і формат схеми JSON.

📊 Основне порівняння

Порівняльний пунктВалідатор за замовчуваннямЯвно ввімкніть FormatChecker
Перевірте обсягВиди та структуриДодаткова перевірка формату деклараціїformat
Висновок щодо 2026-02-30Не припускайте відмовиПотрібно підтвердити контрприкладами
значення при проходженніЦе не означає, що семантика дати правильнаЩе потрібно перевірити пояснення дати на підприємстві

🎯 Який спосіб вам підходить?

Якщо вам просто потрібно переконатися, що поле є рядком або структуровано правильно

Зазвичай достатньо валідатора за замовчуванням, але майте на увазі, що він не обов’язково перевіряє семантику дати.

Якщо потрібно підтвердити, що дата дійсно існує

Явно ввімкніть FormatChecker і перевірте за допомогою контрприкладів, таких як 2026-02-30.

Якщо ви хочете перевірити дату у вихідному файлі

Спочатку підтвердьте вихідні правила послідовності днів і місяців, а потім збережіть вихідний текст і нормалізовані значення.

Якщо ваш сервіс розгорнуто різними мовами

Той самий набір тестів виконується для кожної реалізації.

❓ Часті запитання (FAQ)

1. Схема записана як format: date, чому погані дати все одно можуть пройти?

Спосіб обробки format залежить від конфігурації валідатора, а семантика дати не обов’язково перевіряється за замовчуванням.

2. Чому 2026-02-30 є корисним тестовим значенням?

Здається, дата, але в лютому немає тридцятого числа. Просто перевіряючи зовнішній вигляд, ви пропустите таку проблему.

3. Що станеться, якщо використовується ім'я невідомого формату?

Не слід розглядати його як перевірений, а орфографічні помилки можуть дати вам помилкове відчуття безпеки.

4. Як потрібно конвертувати 03/04/2026?

Необхідно вказати регіон походження, опис поля або чіткий протокол. Інакше було б неможливо визначити, чи це 4 березня чи 3 квітня.

📝 Підсумок

Проходження перевірки означає лише те, що дані відповідають заявленим правилам, але не означає, що значення кожної дати є правильним. Спочатку підтвердьте область перевірки валідатора, а потім використовуйте контрприклади та вихідні правила, щоб виправити обробку дати, щоб результати були надійнішими.

Спробуйте зараз: завантажте документ, щоб розпочати переклад, зберігаючи вихідний макет

Оновлено 2026-11-13