CIDR (Classless Inter-Domain Routing) представляет собой способ записи IP-адреса с указанием маски сети через слэш. Формат включает базовый адрес и длину префикса, определяющую количество бит, относящихся к сети.
Примеры CIDR-записей:
192.168.0.0/2410.0.0.0/82001:db8::/32CIDR активно используется при описании сетевых диапазонов, настройке маршрутизации, ограничении доступа, конфигурации firewall-правил и облачных инфраструктур.
В библиотеке validator.js отсутствует отдельная функция строго с
названием isCIDR, однако проверка CIDR реализуется через
метод:
isIPRange(value[, version])Данный метод позволяет проверять как диапазоны IP-адресов, так и CIDR-нотацию для IPv4 и IPv6.
const validator = require('validator');
validator.isIPRange('192.168.0.0/24'); // true
validator.isIPRange('10.0.0.0/8'); // true
validator.isIPRange('192.168.0.0/33'); // false
Функция автоматически интерпретирует строку как CIDR, если
присутствует символ / и корректный префикс.
IPv4 CIDR ограничивается маской от 0 до 32:
validator.isIPRange('172.16.0.0/12'); // true
validator.isIPRange('172.16.0.0/33'); // false
validator.isIPRange('256.1.1.0/24'); // false
Особенности проверки:
IPv6 использует расширенный адресный формат и префиксы до 128:
validator.isIPRange('2001:db8::/32'); // true
validator.isIPRange('::1/128'); // true
validator.isIPRange('2001:db8::/129'); // false
Особенности:
::)Метод позволяет ограничить проверку только IPv4 или IPv6:
validator.isIPRange('192.168.1.0/24', 4); // true
validator.isIPRange('192.168.1.0/24', 6); // false
validator.isIPRange('2001:db8::/32', 6); // true
validator.isIPRange('2001:db8::/32', 4); // false
Использование версии полезно при строгой типизации входных данных, особенно в API с фиксированным типом адресов.
CIDR-строка состоит из двух частей:
<IP-адрес>/<префикс>
Например:
192.168.10.0/24
Разделение:
192.168.10.0 — базовый адрес сети24 — количество бит, закреплённых за сетьюПри обработке через Validator.js строка анализируется как единое выражение, без необходимости ручного разделения.
При необходимости более строгого контроля можно комбинировать проверки:
const validator = require('validator');
function isValidCIDR(input) {
if (typeof input !== 'string') return false;
const parts = input.split('/');
if (parts.length !== 2) return false;
const [ip, prefix] = parts;
if (!validator.isIP(ip)) return false;
if (!validator.isInt(prefix, { min: 0, max: 128 })) return false;
return validator.isIPRange(input);
}
Такой подход позволяет:
validator.isIPRange('192.168.1.300/24'); // false
Октет выходит за допустимый диапазон.
validator.isIPRange('192.168.1.0'); // false
CIDR требует обязательного указания маски.
validator.isIPRange('192.168.1.0/-1'); // false
validator.isIPRange('192.168.1.0/999'); // false
validator.isIPRange('2001:db8::/32', 4); // false
IPv6-адрес не проходит проверку IPv4-режима.
CIDR часто применяется в системах ограничения доступа:
Пример фильтрации входных данных:
function validateNetworkRule(rule) {
return validator.isIPRange(rule);
}
const rules = [
'192.168.0.0/24',
'10.0.0.0/8',
'invalid_ip/24'
];
const validRules = rules.filter(validateNetworkRule);
Для сложных сценариев применяется дополнительная логика:
function normalizeCIDR(input) {
return input.trim().toLowerCase();
}
function isPrivateCIDR(cidr) {
return (
cidr.startsWith('10.') ||
cidr.startsWith('192.168.') ||
cidr.startsWith('172.')
);
}
validator.isIP(ip, 4);
validator.isIPRange(cidr);
Несмотря на удобство, библиотека не предоставляет:
Она ограничивается синтаксической валидацией строки.
validator.isIPRange(null); // false
validator.isIPRange(undefined); // false
validator.isIPRange(12345); // false
Любые нестроковые значения автоматически отклоняются.
CIDR-валидация используется в следующих контекстах:
const validator = require('validator');
function validateAccessRule(input) {
return (
validator.isLength(input, { min: 5 }) &&
validator.isIPRange(input)
);
}
Такой подход позволяет объединять структурную и синтаксическую проверку.
IPv6 требует особого внимания к сокращённой форме:
validator.isIPRange('2001:0db8:0000:0000::/64'); // true
validator.isIPRange('2001:db8::/64'); // true
Обе формы считаются эквивалентными.