Валидация и очистка строковых данных часто разделяются на два подхода: ограничение допустимых символов и удаление нежелательных. В библиотеке Validator.js для этих задач используются методы blacklist и whitelist, ориентированные не на проверку формата, а на преобразование входных данных путём фильтрации символов.
Метод blacklist удаляет из строки все символы,
перечисленные в наборе запрещённых.
Сигнатура:
validator.blacklist(input, chars)
input — исходная строкаchars — строка, содержащая символы, которые необходимо
удалитьКаждый символ из набора chars удаляется из исходной
строки независимо от его позиции. Операция не учитывает контекст,
регистр или последовательности символов.
const validator = require('validator');
const str = "user:name@example.com";
const result = validator.blacklist(str, ":@");
console.log(result);
// "usernameexample.com"
В данном случае удаляются двоеточие и символ @, что
приводит к изменению структуры строки.
chars не влияют на
результат-, _,
:)Метод whitelist выполняет обратную операцию: из строки
удаляются все символы, которые не входят в заданный набор
допустимых.
Сигнатура:
validator.whitelist(input, chars)
input — исходная строкаchars — строка допустимых символовСохраняются только те символы, которые присутствуют в
chars. Остальные полностью удаляются.
const validator = require('validator');
const str = "u$er12-na!me";
const result = validator.whitelist(str, "abcdefghijklmnopqrstuvwxyz0123456789");
console.log(result);
// "uer12name"
Удалены все символы, не входящие в список разрешённых:
$, -, !.
Оба метода решают задачу фильтрации, но различаются философией обработки данных:
blacklist удаляет нежелательные символыwhitelist оставляет только разрешённые символыvalidator.blacklist("a1b2c3", "abc"); // "12c3"
validator.whitelist("a1b2c3", "abc"); // "abc"
В первом случае удаляются конкретные символы, во втором — сохраняются только указанные.
Методы не являются полноценной защитой от атак и не заменяют экранирование или параметризованные запросы. Их роль ограничивается предварительной обработкой входных данных.
Использование допустимо только как часть многоуровневой валидации, где фильтрация символов дополняется строгими проверками формата.
В контексте Unicode поведение методов остаётся побуквенным, однако
состав chars требует аккуратного определения.
validator.whitelist("café-№1", "abcdefghijklmnopqrstuvwxyz");
Результат:
caf
Диакритические символы и нестандартные знаки удаляются, так как не входят в допустимый набор.
validator.blacklist("+7 (777) 123-45-67", " ()-");
// "+77771234567"
validator.whitelist("ID: 00987-AZ", "0123456789");
// "00987"
validator.blacklist("user.name_2026", "._");
// "username2026"
Частая проблема заключается в попытке использовать
blacklist или whitelist как универсальный
механизм очистки данных. Это приводит к потере структуры и неожиданным
результатам при обработке сложных строк.
Типичные ошибки:
blacklist и whitelist занимают промежуточный слой между сырыми входными данными и строгой валидацией. Их задача — нормализация формы строки, а не проверка её корректности.
В типичной цепочке обработки:
Такое разделение снижает сложность и делает поведение системы предсказуемым.