MAC-адрес представляет собой уникальный идентификатор сетевого интерфейса, закреплённый за оборудованием на канальном уровне модели OSI. Он используется для адресации устройств внутри локальных сетей и состоит из шестибайтного (48-битного) или восьмибайтного (64-битного) представления в зависимости от стандарта (EUI-48 или EUI-64).
Формат записи MAC-адреса строго регламентирован и может быть представлен несколькими вариантами:
AA:BB:CC:DD:EE:FFAA-BB-CC-DD-EE-FFAABB.CCDD.EEFFAABBCCDDEEFFНесмотря на различия в отображении, базовая структура остаётся неизменной: 48 бит, разделённые на организационно уникальный идентификатор производителя (OUI) и идентификатор устройства.
Validator.js предоставляет встроенную функцию для проверки корректности MAC-адресов, позволяя исключить необходимость ручного написания регулярных выражений и учитывать различные стандарты представления.
Основная функция:
validator.isMACAddress(input[, options])
где input — проверяемая строка, а options —
объект конфигурации формата.
Библиотека позволяет проверять несколько стандартов:
any — любой допустимый форматEUI-48 — классический 48-битный MAC-адресEUI-64 — расширенный 64-битный форматТакже поддерживаются различные разделители:
:-Простейший пример проверки:
import validator from 'validator';
validator.isMACAddress('AA:BB:CC:DD:EE:FF');
Функция вернёт true, если строка соответствует
стандартному MAC-адресу формата EUI-48.
Если требуется принять любой корректный MAC-адрес, используется
параметр any:
validator.isMACAddress('AA-BB-CC-DD-EE-FF', {
no_colons: false
});
или более явно:
validator.isMACAddress('AABB.CCDD.EEFF', {
format: 'any'
});
Такой режим используется в системах, где данные приходят из разных источников и могут иметь неоднородный формат записи.
EUI-48 является наиболее распространённым вариантом MAC-адреса. Он предполагает строго 48 бит и стандартное представление:
validator.isMACAddress('AA:BB:CC:DD:EE:FF', {
format: 'eui48'
});
Любые отклонения, включая неправильный разделитель или неверную длину, приводят к отрицательному результату.
EUI-64 используется реже и чаще встречается в автоматической конфигурации IPv6:
validator.isMACAddress('AA:BB:CC:DD:EE:FF:11:22', {
format: 'eui64'
});
В этом случае строка должна содержать восемь октетов, каждый из которых представлен двумя шестнадцатеричными символами.
Validator.js позволяет контролировать допустимые символы-разделители:
validator.isMACAddress('AA-BB-CC-DD-EE-FF', {
format: 'eui48',
delimiter: '-'
});
Если передан другой разделитель, проверка завершится неудачей.
Возможные сценарии:
Перед валидацией часто требуется предварительная очистка строки:
const normalizeMac = (value) =>
value.replace(/[^a-fA-F0-9]/g, '');
validator.isMACAddress(normalizeMac('AA-BB-CC-DD-EE-FF'));
Такой подход используется при обработке пользовательского ввода, логов сетевого оборудования или данных API, где форматирование может быть нестабильным.
MAC-адреса могут содержать буквы от A до F в верхнем или нижнем регистре. Validator.js не чувствителен к регистру:
validator.isMACAddress('aa:bb:cc:dd:ee:ff');
validator.isMACAddress('AA:BB:CC:DD:EE:FF');
Оба варианта считаются корректными, так как сравнение выполняется в рамках шестнадцатеричного диапазона.
При работе с MAC-адресами часто встречаются ошибки, которые Validator.js позволяет отлавливать автоматически:
Неверная длина
Недопустимые символы
G,
Z, @)Смешанные разделители
AA:BB-CC:DD:EE:FFОтсутствие разделителей при неправильной длине
AABBCCDDEEFFGGПри обработке сетевых конфигураций MAC-адрес часто передаётся как часть JSON-объекта:
app.post('/device', (req, res) => {
const { mac } = req.body;
if (!validator.isMACAddress(mac)) {
return res.status(400).send('Invalid MAC address');
}
// дальнейшая обработка
});
Такой подход используется в API управления сетевыми устройствами, системах мониторинга и DHCP-сервисах.
На клиентской стороне MAC-адрес часто валидируется до отправки:
function validateForm(mac) {
return validator.isMACAddress(mac, { format: 'any' });
}
Дополнительно может применяться форматирование в реальном времени, когда пользователь вводит значение, а система автоматически добавляет разделители после каждого второго символа.
Ручная проверка MAC-адреса через регулярное выражение выглядит следующим образом:
const regex = /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/;
regex.test('AA:BB:CC:DD:EE:FF');
Однако такой подход:
Validator.js абстрагирует эти детали, предоставляя единый интерфейс проверки.
Валидация MAC-адресов критична в следующих сценариях:
В этих задачах некорректный MAC-адрес может привести к нарушению логики маршрутизации или ошибкам идентификации устройств.
Некоторые системы принимают нестандартные представления MAC-адресов:
AA BB CC DD EE FFMAC: AA:BB:CC:DD:EE:FFValidator.js позволяет предварительно нормализовать такие данные, после чего выполнять строгую проверку.
Функция isMACAddress возвращает false
для:
nullundefinedПоэтому перед проверкой часто используется явное преобразование:
validator.isMACAddress(String(mac || ''));
MAC-адрес часто является частью комплексной проверки устройства:
validator.isMACAddress(mac) &&
validator.isIP(ip) &&
validator.isUUID(deviceId);
Такой подход применяется в системах регистрации оборудования, где требуется связать сетевой адрес, IP и уникальный идентификатор устройства в одной записи.