Библиотека Validator.js используется для валидации строковых данных в Node.js и браузере. Чаще всего применяется при обработке HTTP-запросов: проверке email, телефонов, URL, UUID, дат, IP-адресов, числовых значений и пользовательского ввода из форм.
Официальный сайт: Validator.js
npm install validator
CommonJS:
const validator = require('validator');
ES Modules:
import validator fr om 'validator';
Большинство методов Validator.js принимают строку и возвращают
true или false.
Пример:
import validator fr om 'validator';
const email = 'admin@example.com';
console.log(validator.isEmail(email));
Результат:
true
Если значение не соответствует формату:
console.log(validator.isEmail('invalid-email'));
Результат:
false
На практике данные обычно приходят через:
req.bodyreq.queryreq.paramsreq.headersПример Express-приложения:
import express fr om 'express';
import validator fr om 'validator';
const app = express();
app.use(express.json());
app.post('/register', (req, res) => {
const { email } = req.body;
if (!validator.isEmail(email)) {
return res.status(400).json({
error: 'Некорректный email'
});
}
res.json({
success: true
});
});
Validator.js работает только со строками, поэтому перед проверкой
необходимо учитывать undefined, null и другие
типы.
Пример ошибки:
validator.isEmail(undefined);
Возникнет исключение:
TypeError
Безопасная проверка:
if (!email || !validator.isEmail(email)) {
return res.status(400).json({
error: 'Некорректный email'
});
}
Метод isEmpty() проверяет, является ли строка
пустой.
validator.isEmpty('');
Результат:
true
Однако строка из пробелов не считается пустой:
validator.isEmpty(' ');
Результат:
false
Для удаления пробелов используется trim():
validator.isEmpty(' '.trim());
Результат:
true
Проверка поля имени:
const name = req.body.name;
if (!name || validator.isEmpty(name.trim())) {
return res.status(400).json({
error: 'Имя обязательно'
});
}
Validator.js содержит функции очистки данных.
Удаляет пробелы по краям строки.
const value = validator.trim(' admin ');
console.log(value);
Результат:
admin
Экранирует HTML-символы.
validator.escape('<script>alert(1)</script>');
Результат:
<script>alert(1)</script>
Полезно при защите от XSS.
validator.isEmail('user@gmail.com');
validator.isEmail('admin@test.com', {
allow_utf8_local_part: false,
require_tld: true
});
| Опция | Описание |
|---|---|
allow_display_name |
Разрешает John <john@mail.com> |
require_tld |
Требует доменную зону |
allow_utf8_local_part |
Разрешает UTF-8 символы |
ignore_max_length |
Игнорирует ограничение длины |
Validator.js не содержит отдельной функции проверки сложности пароля, но предоставляет инструменты для этого.
validator.isLength(password, {
min: 8,
max: 64
});
validator.matches(password, /\d/);
validator.matches(password, /[A-Z]/);
function validatePassword(password) {
if (!validator.isLength(password, { min: 8 })) {
return 'Минимум 8 символов';
}
if (!validator.matches(password, /\d/)) {
return 'Нужна хотя бы одна цифра';
}
if (!validator.matches(password, /[A-Z]/)) {
return 'Нужна заглавная буква';
}
return null;
}
validator.isInt('42');
validator.isInt('25', {
min: 18,
max: 60
});
validator.isFloat('19.99');
validator.isDecimal('99.95');
const age = req.body.age;
if (!validator.isInt(age, { min: 18 })) {
return res.status(400).json({
error: 'Возраст должен быть не менее 18'
});
}
validator.isURL('https://example.com');
validator.isURL('https://example.com', {
protocols: ['https'],
require_protocol: true
});
validator.isURL(url, {
require_protocol: true,
require_host: true,
allow_protocol_relative_urls: false,
allow_fragments: true,
allow_query_components: true
});
validator.isUUID('550e8400-e29b-41d4-a716-446655440000');
Определённая версия:
validator.isUUID(id, 4);
validator.isJWT(token);
Пример:
if (!validator.isJWT(token)) {
return res.status(401).json({
error: 'Некорректный токен'
});
}
Следует учитывать, что метод проверяет формат токена, а не его подпись.
validator.isJSON('{"name":"Alex"}');
validator.isDate('2025-05-11');
validator.isISO8601('2025-05-11T12:00:00Z');
validator.isIP('192.168.1.1', 4);
validator.isIP('2001:db8::1', 6);
Validator.js содержит метод isMobilePhone().
validator.isMobilePhone('+77001234567', 'kk-KZ');
Можно использовать локали:
validator.isMobilePhone(phone, ['ru-RU', 'kk-KZ']);
Slug — URL-безопасная строка.
validator.isSlug('my-awesome-post');
validator.isHexadecimal('ff00aa');
validator.isCreditCard('4111111111111111');
Для реальных платежей такой проверки недостаточно — необходима интеграция с платёжными системами.
Validator.js не содержит встроенной проверки ObjectId,
но можно использовать регулярное выражение.
const isObjectId = validator.matches(
id,
/^[0-9a-fA-F]{24}$/
);
Пример:
GET /users?page=2&limit=20
Проверка:
app.get('/users', (req, res) => {
const { page, lim it } = req.query;
if (page && !validator.isInt(page, { min: 1 })) {
return res.status(400).json({
error: 'Некорректный page'
});
}
if (lim it && !validator.isInt(lim it, {
min: 1,
max: 100
})) {
return res.status(400).json({
error: 'Некорректный lim it'
});
}
res.json({
success: true
});
});
Маршрут:
GET /users/:id
Проверка UUID:
app.get('/users/:id', (req, res) => {
const { id } = req.params;
if (!validator.isUUID(id)) {
return res.status(400).json({
error: 'Некорректный ID'
});
}
res.json({
success: true
});
});
Метод normalizeEmail() приводит email к
стандартизированному виду.
const email = validator.normalizeEmail(
'Admin@GMAIL.COM'
);
console.log(email);
Результат:
admin@gmail.com
Разрешает только определённые символы.
validator.whitelist('abc123', 'a-z');
Результат:
abc
Удаляет запрещённые символы.
validator.blacklist('hello<script>', '<>');
Результат:
helloscript
function validateUser(data) {
const errors = {};
if (!data.email || !validator.isEmail(data.email)) {
errors.email = 'Некорректный email';
}
if (!data.password ||
!validator.isLength(data.password, { min: 8 })) {
errors.password = 'Слишком короткий пароль';
}
return {
isValid: Object.keys(errors).length === 0,
errors
};
}
Использование:
const result = validateUser(req.body);
if (!result.isValid) {
return res.status(400).json(result.errors);
}
Пример универсального валидатора:
const rules = {
email: value => validator.isEmail(value),
age: value => validator.isInt(value, { min: 18 }),
username: value => validator.isLength(value, {
min: 3,
max: 20
})
};
function validate(data, rules) {
const errors = {};
for (const field in rules) {
const isValid = rules[field](data[field]);
if (!isValid) {
errors[field] = 'Некорректное значение';
}
}
return errors;
}
function validate(data) {
const errors = [];
if (!validator.isEmail(data.email)) {
errors.push({
field: 'email',
message: 'Некорректный email'
});
}
if (!validator.isLength(data.password, {
min: 8
})) {
errors.push({
field: 'password',
message: 'Короткий пароль'
});
}
return errors;
}
Validator.js не приводит типы автоматически.
Неправильно:
validator.isInt(25);
Правильно:
validator.isInt(String(25));
При работе с запросами Express это обычно не проблема, так как данные приходят строками.
Безопасная проверка:
function toString(value) {
if (value === null || value === undefined) {
return '';
}
return String(value);
}
Использование:
validator.isEmail(toString(req.body.email));
function validateEmail(req, res, next) {
const { email } = req.body;
if (!email || !validator.isEmail(email)) {
return res.status(400).json({
error: 'Некорректный email'
});
}
next();
}
Подключение:
app.post(
'/register',
validateEmail,
controller
);
Validator.js выполняет только синхронные проверки.
Для проверки уникальности пользователя:
app.post('/register', async (req, res) => {
const { email } = req.body;
if (!validator.isEmail(email)) {
return res.status(400).json({
error: 'Некорректный email'
});
}
const exists = await User.findOne({
email
});
if (exists) {
return res.status(400).json({
error: 'Email уже используется'
});
}
res.json({
success: true
});
});
Ошибка:
validator.isEmail(' admin@gmail.com ');
Результат:
false
Правильно:
validator.isEmail(
validator.trim(email)
);
Ошибка:
validator.isEmail(req.body.email);
Если поле отсутствует — приложение упадёт.
Проверка в браузере не заменяет серверную валидацию. Любой HTTP-запрос может быть отправлен вручную через Postman, curl или скрипт.
import validator from 'validator';
function validateRegister(data) {
const errors = {};
const email = validator.trim(
String(data.email || '')
);
const password = String(data.password || '');
const username = validator.trim(
String(data.username || '')
);
if (!validator.isEmail(email)) {
errors.email = 'Некорректный email';
}
if (!validator.isLength(password, {
min: 8,
max: 64
})) {
errors.password =
'Пароль должен содержать от 8 до 64 символов';
}
if (!validator.matches(password, /\d/)) {
errors.password =
'Пароль должен содержать цифру';
}
if (!validator.isLength(username, {
min: 3,
max: 20
})) {
errors.username =
'Имя пользователя должно быть от 3 до 20 символов';
}
if (!validator.matches(username, /^[a-zA-Z0-9_]+$/)) {
errors.username =
'Допустимы только буквы, цифры и _';
}
return {
errors,
isValid: Object.keys(errors).length === 0
};
}
function registerValidator(req, res, next) {
const result = validateRegister(req.body);
if (!result.isValid) {
return res.status(400).json({
errors: result.errors
});
}
next();
}
Использование:
app.post(
'/register',
registerValidator,
registerController
);
Validator.js:
Ограничения:
Validator.js особенно удобен в следующих случаях:
Для сложных схем часто используются дополнительные библиотеки:
Однако Validator.js остаётся одной из самых популярных низкоуровневых библиотек для проверки строковых данных в JavaScript и Node.js.