Список санитайзеров

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

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

trim(), ltrim(), rtrim()

trim()

Удаляет пробельные символы в начале и конце строки.

const validator = require('validator');

validator.trim('   hello world   ');
// 'hello world'

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

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

validator.trim('---hello---', '-');
// 'hello'

ltrim()

Удаляет символы только в начале строки.

validator.ltrim('***hello***', '*');
// 'hello***'

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

rtrim()

Удаляет символы только в конце строки.

validator.rtrim('///path///', '/');
// '///path'

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

escape()

Преобразует HTML-опасные символы в безопасные сущности.

validator.escape('<script>alert("x")</script>');
// '&lt;script&gt;alert(&quot;x&quot;)&lt;&#x2F;script&gt;'

Назначение

Основная задача — предотвращение XSS-атак при выводе пользовательского контента в HTML-контекст. Символы <, >, ", ', / заменяются на соответствующие HTML-сущности.

Типичные сценарии

  • вывод комментариев пользователей
  • отображение текстовых сообщений в UI
  • логирование HTML-ввода

Важно учитывать, что escape не удаляет содержимое, а только экранирует его.

unescape()

Обратное преобразование для escape-последовательностей.

validator.unescape('&lt;b&gt;text&lt;/b&gt;');
// '<b>text</b>'

Особенности

Используется реже, так как восстановление исходного HTML может быть небезопасным в веб-контексте. Применяется преимущественно при обработке ранее экранированных данных в серверных системах или при миграции данных.

normalizeEmail()

Приводит email-адрес к каноническому виду с учётом правил почтовых провайдеров.

validator.normalizeEmail('User.Name+tag@gmail.com');
// 'username@gmail.com'

Основные функции нормализации

  • приведение домена к нижнему регистру
  • удаление точек в локальной части (для Gmail)
  • удаление тегов вида +tag
  • стандартизация формата

Пример с опциями

validator.normalizeEmail('User.Name+tag@gmail.com', {
  gmail_remove_dots: true,
  gmail_remove_subaddress: true
});

Применение

  • дедупликация пользователей
  • унификация логинов
  • поиск и сравнение email-адресов

toInt()

Преобразует строку в целое число.

validator.toInt('42');
// 42

Поведение

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

validator.toInt('42px');
// 42

Особенности

  • возвращает NaN при невозможности преобразования
  • поддерживает отрицательные числа

toFloat()

Преобразование строки в число с плавающей точкой.

validator.toFloat('3.1415');
// 3.1415

Особенности обработки

validator.toFloat('10.99abc');
// 10.99

Используется для обработки цен, координат, измерений.

toBoolean()

Преобразует строковое значение в булево.

validator.toBoolean('true');
// true

Поддерживаемые значения

Истинные:

  • “true”
  • “1”
  • “yes”
  • “y”
  • “on”

Ложные:

  • “false”
  • “0”
  • “no”
  • “n”
  • “off”

Пример

validator.toBoolean('YES', true);
// true (строгий режим)

В строгом режиме допускаются только строго определённые значения.

toDate()

Преобразует строку в объект Date.

validator.toDate('2025-01-01');
// Date object

Особенности

  • использует встроенный парсинг JavaScript Date
  • зависит от формата строки
  • возвращает Invalid Date при ошибке

Применение

  • обработка дат из форм
  • нормализация временных меток
  • подготовка данных для БД

stripLow()

Удаляет символы ASCII с кодами < 32 (управляющие символы), кроме табуляции, перевода строки и возврата каретки (в зависимости от конфигурации).

validator.stripLow('hello\u0000world');
// 'helloworld'

Опции

validator.stripLow('hello\u0007world', true);
// может сохранить переносы строк

Назначение

  • очистка текстов от скрытых символов
  • защита от повреждённых данных
  • нормализация копированного контента

whitelist()

Удаляет все символы, кроме разрешённых.

validator.whitelist('abc123def', 'abc');
// 'abcabc'

Логика работы

Остаются только символы, указанные во втором аргументе.

Применение

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

blacklist()

Удаляет указанные символы из строки.

validator.blacklist('abc123def', '123');
// 'abcdef'

Отличие от whitelist

  • blacklist удаляет запрещённые символы
  • whitelist оставляет только разрешённые

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

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

toString()

Явное приведение значения к строке.

validator.toString(123);
// '123'

Особенности

  • преобразует любые типы (числа, объекты)
  • используется как гарантия строкового типа перед дальнейшей обработкой
validator.toString(null);
// 'null'

Применение

  • унификация входных данных
  • подготовка к цепочкам санитизации
  • защита от неожиданных типов

Комбинирование санитайзеров

В Validator.js санитайзеры часто используются в цепочке преобразований:

validator.trim(
  validator.escape(
    validator.toString(input)
  )
);

В более прикладном виде:

validator.normalizeEmail(
  validator.trim(email)
);

Такая композиция позволяет последовательно очищать и приводить данные к нужному формату перед валидацией или сохранением.

Поведение при ошибках и нестандартных входных данных

Санитайзеры стремятся к предсказуемому результату:

  • некорректные строки часто возвращаются без изменений или приводятся к пустому значению
  • числовые преобразования могут возвращать NaN
  • дата может стать Invalid Date

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