MAC-адрес (Media Access Control Address) — уникальный идентификатор
сетевого интерфейса устройства. Библиотека Validator.js предоставляет
встроенные средства проверки корректности MAC-адресов через метод
isMACAddress().
Поддерживаются различные варианты записи:
:)-).)isMACAddress()Для проверки используется функция:
validator.isMACAddress(str [, options])
const validator = require('validator');
Либо:
import validator from 'validator';
Наиболее распространённый формат:
01:23:45:67:89:ab
validator.isMACAddress('01:23:45:67:89:ab');
Результат:
true
Каждая группа содержит:
две шестнадцатеричные цифры
диапазон:
0-9a-fA-FПример:
validator.isMACAddress('AA:BB:CC:DD:EE:FF');
true
Некоторые системы используют разделитель -.
Пример:
01-23-45-67-89-ab
validator.isMACAddress('01-23-45-67-89-ab');
true
Сетевое оборудование Cisco часто использует запись:
0123.4567.89ab
validator.isMACAddress('0123.4567.89ab');
true
Адрес делится на три блока:
XXXX.XXXX.XXXX
Каждый блок содержит 4 hexadecimal-символа.
Некоторые приложения используют MAC-адрес без разделителей:
0123456789ab
validator.isMACAddress('0123456789ab', {
no_separators: true
});
true
no_separatorsОпция разрешает запись без разделителей.
validator.isMACAddress('aabbccddeeff', {
no_separators: true
});
true
validator.isMACAddress('aabbccddeeff');
false
Validator.js позволяет требовать строго определённый формат.
euiПоддерживаемые значения:
| Значение | Формат |
|---|---|
48 |
MAC-48 |
64 |
EUI-64 |
Классический MAC-адрес состоит из 48 бит.
validator.isMACAddress('01:23:45:67:89:ab', {
eui: '48'
});
true
Формат EUI-64 содержит 64 бита.
Пример:
01:23:45:67:89:ab:cd:ef
validator.isMACAddress('01:23:45:67:89:ab:cd:ef', {
eui: '64'
});
true
Содержит:
6 байт
12 hexadecimal-символов
Пример:
aa:bb:cc:dd:ee:ff
Содержит:
8 байт
16 hexadecimal-символов
Пример:
aa:bb:cc:dd:ee:ff:11:22
Validator.js отклоняет любые символы вне hexadecimal-диапазона.
validator.isMACAddress('01:23:45:67:89:ZZ');
false
Недостаточное количество блоков приводит к ошибке проверки.
validator.isMACAddress('01:23:45:67:89');
false
Использование разных разделителей одновременно запрещено.
validator.isMACAddress('01:23-45:67-89:ab');
false
Частый сценарий — валидация данных формы.
function validateMac(mac) {
if (!validator.isMACAddress(mac)) {
throw new Error('Некорректный MAC-адрес');
}
return true;
}
Перед сохранением часто выполняется унификация формата.
function normalizeMac(mac) {
return mac
.toLowerCase()
.replace(/-/g, ':');
}
const mac = normalizeMac('AA-BB-CC-DD-EE-FF');
console.log(mac);
Результат:
aa:bb:cc:dd:ee:ff
Практический вариант:
function processMac(mac) {
const normalized = mac
.toLowerCase()
.replace(/-/g, ':');
if (!validator.isMACAddress(normalized)) {
return null;
}
return normalized;
}
const macs = [
'00:11:22:33:44:55',
'AA-BB-CC-DD-EE-FF',
'invalid'
];
const validMacs = macs.filter(mac =>
validator.isMACAddress(mac)
);
console.log(validMacs);
Результат:
[
'00:11:22:33:44:55',
'AA-BB-CC-DD-EE-FF'
]
app.post('/device', (req, res) => {
const { mac } = req.body;
if (!validator.isMACAddress(mac)) {
return res.status(400).json({
error: 'Некорректный MAC-адрес'
});
}
res.json({
success: true
});
});
Validator.js автоматически поддерживает:
aa:bb:cc:dd:ee:ffAA:BB:CC:DD:EE:FFvalidator.isMACAddress('Aa:Bb:Cc:Dd:Ee:Ff');
true
| Формат | Пример |
|---|---|
| Colon-separated | 01:23:45:67:89:ab |
| Hyphen-separated | 01-23-45-67-89-ab |
| Cisco-style | 0123.4567.89ab |
| Без разделителей | 0123456789ab |
Иногда требуется строгий формат.
const regex = /^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$/;
regex.test('01:23:45:67:89:ab');
true
Validator.js можно использовать как базовую проверку, а регулярное выражение — как дополнительное ограничение.
function validateStrictMac(mac) {
const strict = /^([0-9a-f]{2}:){5}[0-9a-f]{2}$/;
return (
validator.isMACAddress(mac) &&
strict.test(mac)
);
}
validator.isMACAddress(
'0011223344556677',
{
eui: '64',
no_separators: true
}
);
true
validator.isMACAddress('01:23:45:67:89:ab:');
false
validator.isMACAddress(' 01:23:45:67:89:ab ');
false
validator.isMACAddress(mac.trim());
validator.isMACAddress('1:23:45:67:89:ab');
false
async function saveDevice(mac) {
const normalized = mac.trim().toLowerCase();
if (!validator.isMACAddress(normalized)) {
throw new Error('Ошибка MAC-адреса');
}
await db.devices.insert({
mac: normalized
});
}
import validator from 'validator';
import { useState } from 'react';
function MacInput() {
const [mac, setMac] = useState('');
const [error, setError] = useState('');
function handleChange(e) {
const value = e.target.value;
setMac(value);
if (!validator.isMACAddress(value)) {
setError('Некорректный MAC');
} else {
setError('');
}
}
return (
<>
<input
value={mac}
onCha nge={handleChange}
/>
{error && <p>{error}</p>}
</>
);
}
import validator from 'validator';
function isValidMac(mac: string): boolean {
return validator.isMACAddress(mac);
}
Validator.js проверяет:
| Формат | Поддержка |
|---|---|
aa:bb:cc:dd:ee:ff |
Да |
AA-BB-CC-DD-EE-FF |
Да |
aabb.ccdd.eeff |
Да |
aabbccddeeff |
Да, с no_separators |
aa:bb:cc:dd:ee |
Нет |
gg:bb:cc:dd:ee:ff |
Нет |
aa-bb:cc-dd:ee-ff |
Нет |