Описание ограничений

В библиотеке Validator.js ограничения представляют собой набор правил, применяемых к строковым значениям для проверки их соответствия ожидаемому формату, диапазону или структуре. Архитектура ограничений построена вокруг принципа независимых проверок, каждая из которых выполняет строго определённую функцию и возвращает булев результат.

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


Строковые ограничения

Строковые ограничения являются базовыми и применяются к значениям, которые трактуются как текстовые данные.

Основные проверки:

  • Длина строки

    • минимальная длина (isLength(str, { min }))
    • максимальная длина (isLength(str, { max }))
    • диапазон длины (isLength(str, { min, max }))
  • Пустые значения

    • проверка на пустую строку (isEmpty)
    • обратная проверка — обязательное заполнение (через инверсию isEmpty)
  • Обрезка пробелов Validator.js не изменяет строку автоматически, но многие ограничения предполагают предварительное приведение к нормализованному виду (например, trim до проверки длины)

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


Числовые ограничения

Хотя Validator.js работает со строками, числовые ограничения реализуются через попытку интерпретации строки как числа.

Основные функции:

  • Проверка целого числа

    • isInt(value, { min, max })
  • Проверка числа с плавающей точкой

    • isFloat(value, { min, max })
  • Диапазоны значений

    • ограничение нижней границы (min)
    • ограничение верхней границы (max)

Особенность числовых ограничений заключается в том, что входное значение должно быть строкой, содержащей корректное числовое представление. Любые посторонние символы автоматически приводят к провалу проверки.


Форматные ограничения

Форматные ограничения являются одной из наиболее часто используемых групп и предназначены для проверки структурированных данных.

Распространённые проверки:

  • Email

    • isEmail(value) Проверяет соответствие стандартному формату электронной почты с учётом локальной и доменной части.
  • URL

    • isURL(value) Поддерживает проверку протоколов, доменов, портов и путей.
  • IP-адреса

    • isIP(value, version) Поддержка IPv4 и IPv6.
  • Телефонные номера

    • isMobilePhone(value, locale) Зависит от локали и региональных правил формата.

Форматные ограничения ориентированы на строгую структуру данных и минимизируют вероятность принятия некорректных значений.


Регулярные выражения

Validator.js предоставляет универсальный механизм проверки через регулярные выражения.

  • matches(value, pattern, modifiers)

Регулярные выражения используются для реализации произвольных ограничений, выходящих за рамки встроенных функций. Это позволяет задавать:

  • допустимые наборы символов
  • сложные шаблоны идентификаторов
  • кастомные форматы кодов и токенов

Гибкость этого механизма компенсируется необходимостью аккуратного проектирования выражений, поскольку ошибки в шаблоне приводят к ложным результатам валидации.


Комбинированные ограничения

В реальных сценариях ограничения редко применяются изолированно. Validator.js предполагает последовательное комбинирование проверок.

Типичный пример цепочки:

  • проверка на пустое значение
  • проверка длины
  • проверка формата
  • проверка допустимых символов

Порядок применения имеет значение: ранний отказ на простых проверках снижает вычислительную нагрузку и упрощает диагностику ошибок.


Пользовательские ограничения

Помимо встроенных функций, Validator.js допускает использование внешней логики для определения допустимости значения.

Пользовательские ограничения реализуются через:

  • внешние функции-обёртки
  • композицию с условными проверками
  • расширение набора валидаторов на уровне приложения

Такие ограничения применяются в случаях, когда стандартных проверок недостаточно, например:

  • проверка уникальности значения в базе данных
  • зависимость корректности от других полей формы
  • контекстные бизнес-правила

Особенности обработки пустых значений

Validator.js не всегда рассматривает пустую строку как ошибку. Поведение зависит от конкретной функции.

  • Некоторые проверки игнорируют пустые значения при условии предварительной обработки
  • Другие требуют явного исключения пустых строк через isEmpty

Это создаёт необходимость явного определения политики обработки отсутствующих данных на уровне приложения.


Нормализация и предобработка

Ограничения Validator.js предполагают, что входные данные уже приведены к строковому виду. Однако на практике часто требуется дополнительная нормализация:

  • удаление пробелов в начале и конце строки
  • приведение регистра
  • удаление невидимых символов
  • преобразование типов в строку

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


Ошибки и поведение при несоответствии

Каждое ограничение возвращает булево значение, не выбрасывая исключений. Это определяет модель обработки ошибок:

  • true — значение соответствует ограничению
  • false — значение нарушает правило

Отсутствие исключений делает Validator.js предсказуемым инструментом, интегрируемым в цепочки обработки данных без необходимости использования try/catch для валидации.

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