Работа с IP-адресами в JavaScript часто сводится к проверке корректности строки, поступающей от пользователя, API или внешней системы. Библиотека validator.js предоставляет набор функций для строгой и предсказуемой валидации IPv4 и IPv6 адресов, минимизируя необходимость ручных регулярных выражений и снижая риск логических ошибок.
IPv4-адрес представляет собой 32-битное число, записанное в виде четырёх октетов:
A.B.C.D
Каждый октет обязан соответствовать диапазону:
Примеры корректных адресов:
192.168.0.1
127.0.0.1
8.8.8.8
Некорректные варианты:
256.100.50.25 // превышение диапазона
192.168.1 // недостаточно октетов
192.168.01.1 // ведущий ноль (в большинстве реализаций считается некорректным)
192.168.1.1.1 // лишний сегмент
192.168.-1.1 // отрицательное значение
Validator.js реализует строгую проверку этих правил с учётом распространённых стандартов RFC и практики веб-разработки.
Библиотека предоставляет несколько функций для работы с IP-адресами:
Базовая функция для проверки IPv4:
validator.isIPv4(str)
Возвращает true, если строка является корректным
IPv4-адресом.
Примеры:
validator.isIPv4('192.168.0.1') // true
validator.isIPv4('255.255.255.255') // true
validator.isIPv4('256.1.1.1') // false
validator.isIPv4('1.1.1') // false
Функция:
validator.isIP(str, version)
Параметр version определяет тип IP:
4 — IPv46 — IPv6undefined — проверка обоих типовПримеры:
validator.isIP('192.168.0.1', 4) // true
validator.isIP('192.168.0.1', 6) // false
validator.isIP('::1', 6) // true
validator.isIP('8.8.8.8') // true (IPv4 или IPv6)
Проверка IPv4-адреса в библиотеке строится на нескольких уровнях:
Строка делится по символу точки:
["192", "168", "0", "1"]
Количество сегментов должно быть строго равно 4.
Каждый сегмент преобразуется в число и проверяется:
validator.js отклоняет:
Пример:
"01.2.3.4" → false
Один из ключевых нюансов IPv4 — интерпретация ведущих нулей.
В строгих реализациях:
01.2.3.4 → некорректно
Причина: неоднозначность представления (в некоторых системах ранее интерпретировалось как восьмеричное число).
Validator.js придерживается безопасного подхода и рассматривает такие записи как невалидные IPv4.
Функция isIP удобна, когда формат адреса заранее
неизвестен.
Пример обработки входных данных:
function validateAddress(ip) {
if (validator.isIP(ip, 4)) {
return 'IPv4';
}
if (validator.isIP(ip, 6)) {
return 'IPv6';
}
return 'invalid';
}
Такой подход позволяет унифицировать обработку сетевых данных без дополнительных библиотек.
В веб-формах IP часто используется для:
Пример:
if (!validator.isIPv4(inputValue)) {
throw new Error('Некорректный IPv4 адрес');
}
В конфигурационных файлах:
const config = {
allowedIP: '192.168.0.10'
};
if (!validator.isIPv4(config.allowedIP)) {
throw new Error('Ошибка конфигурации: IP неверный');
}
При обработке логов серверов:
logs.filter(entry => validator.isIPv4(entry.ip))
Это позволяет отделять реальные IP от мусорных значений.
"" → false
"192.168.0.1 " → false
Validator.js не выполняет автоматическое trim внутри IP-проверок.
0.0.0.0 → true
Используется как специальный адрес (unspecified address).
255.255.255.255 → true
Считается валидным IPv4, несмотря на специальное назначение.
300.1.1.1 → false
Проверка строго ограничивает диапазон каждого октета.
Использование регулярных выражений для IPv4 часто приводит к ошибкам:
Validator.js заменяет это готовой реализацией, которая:
В backend-логике IPv4 проверка часто является частью middleware:
app.use((req, res, next) => {
const ip = req.headers['x-forwarded-for'] || req.socket.remoteAddress;
if (!validator.isIP(ip, 4)) {
return res.status(400).send('Invalid IP');
}
next();
});
Это снижает риск обработки некорректных сетевых данных.
validator.js работает одинаково в:
Отсутствие зависимости от платформы делает проверку IPv4 стабильной в распределённых системах.
| Функция | IPv4 | IPv6 | Универсальность |
|---|---|---|---|
| isIPv4 | да | нет | нет |
| isIP(ip, 4) | да | нет | частичная |
| isIP(ip) | да | да | полная |
validator.isIP(ip) // может принять IPv6
В системах, где допустим только IPv4, это приводит к логическим ошибкам.
validator.isIPv4(req.body.ip)
без предварительной нормализации строки может давать неожиданные результаты при наличии пробелов.
Часто приводит к конфликтам с реальной спецификацией IP-адресов.
При обработке больших массивов IP-адресов:
const valid = ips.filter(validator.isIPv4);
validator.js остаётся достаточно производительным, так как проверка выполняется через оптимизированные внутренние алгоритмы без тяжёлых регулярных выражений.