MAC-адреса

MAC-адрес в прикладных интерфейсах ввода представляет собой строковый идентификатор фиксированного формата, состоящий из 6 октетов, обычно записываемых в шестнадцатеричном виде. В пользовательских формах он используется для идентификации сетевых устройств, фильтрации оборудования, регистрации сетевых интерфейсов и системной валидации аппаратных параметров.

На уровне интерфейса ввода MAC-адрес характеризуется строгой структурой:

  • 6 байт (octets)
  • 16-ричная система счисления
  • разделители: : или - или отсутствие разделителей
  • допустимые символы: 0-9, A-F, a-f

Типичные формы представления:

  • 00:1A:2B:3C:4D:5E
  • 00-1A-2B-3C-4D-5E
  • 001A2B3C4D5E

Библиотека Inputmask предоставляет механизм описания шаблонов ввода через маски, псевдонимы (aliases) и регулярные выражения. MAC-адрес в рамках Inputmask обычно задаётся как комбинация шестнадцатеричных символов и фиксированных разделителей.

Базовая структура маски строится из повторяющихся блоков:

  • два шестнадцатеричных символа
  • разделитель
  • повторение 6 раз (с последним блоком без завершающего разделителя)

Маска с двоеточиями

Наиболее распространённый формат — XX:XX:XX:XX:XX:XX.

В Inputmask это выражается через последовательность символов h (hex) и литералов:

Inputmask({
  mask: "hh:hh:hh:hh:hh:hh",
  definitions: {
    h: {
      validator: "[0-9A-Fa-f]",
      casing: "upper"
    }
  }
}).mask(element);

В этой конфигурации:

  • hh описывает один октет
  • : фиксированный разделитель
  • validator ограничивает ввод шестнадцатеричными символами
  • casing: "upper" приводит ввод к верхнему регистру

Маска с дефисами

Альтернативное представление часто используется в Windows-средах:

XX-XX-XX-XX-XX-XX

Конфигурация Inputmask аналогична, изменяется только литерал разделителя:

Inputmask({
  mask: "hh-hh-hh-hh-hh-hh",
  definitions: {
    h: {
      validator: "[0-9A-Fa-f]",
      casing: "upper"
    }
  }
}).mask(element);

Разделитель является частью синтаксиса маски и не участвует в валидации символов.


Непрерывный формат без разделителей

Форма без разделителей используется в системах, где MAC-адрес хранится как 12-символьная строка:

001A2B3C4D5E

Для Inputmask применяется линейная маска:

Inputmask({
  mask: "hhhhhhhhhhhh",
  definitions: {
    h: {
      validator: "[0-9A-Fa-f]",
      casing: "upper"
    }
  }
}).mask(element);

Здесь отсутствуют визуальные разделители, а структура определяется исключительно количеством символов.


Унификация форматов через альтернативные маски

MAC-адрес часто поддерживает несколько форматов одновременно. В Inputmask это реализуется через массив масок:

Inputmask({
  mask: [
    "hh:hh:hh:hh:hh:hh",
    "hh-hh-hh-hh-hh-hh",
    "hhhhhhhhhhhh"
  ],
  definitions: {
    h: {
      validator: "[0-9A-Fa-f]",
      casing: "upper"
    }
  }
}).mask(element);

Такая конфигурация допускает ввод данных в разных стилях при единой логике валидации.


Регистровая нормализация

Сетевые идентификаторы не чувствительны к регистру, однако в интерфейсах ввода часто применяется нормализация.

Параметр casing управляет преобразованием символов:

  • "upper" — приведение к верхнему регистру
  • "lower" — приведение к нижнему регистру
  • отсутствие параметра — сохранение исходного регистра

Пример нормализации:

definitions: {
  h: {
    validator: "[0-9A-Fa-f]",
    casing: "lower"
  }
}

Использование регулярного выражения вместо маски

В случаях, когда требуется строгая проверка формата без поэтапного ввода, применяется regex-режим Inputmask:

Inputmask({
  regex: "([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})"
}).mask(element);

Регулярное выражение описывает:

  • пять повторяющихся групп XX: или XX-
  • завершающий октет XX
  • допустимые шестнадцатеричные символы

Поведение при частичном вводе

Inputmask для MAC-адресов реализует поэтапную валидацию:

  • ввод символов блокируется при несоответствии hex-диапазону
  • разделители вставляются автоматически
  • незавершённые октеты удерживаются как placeholder-символы

Placeholder обычно отображает ожидаемую структуру:

  • _ или как заполнитель
  • визуальное разделение октетов

Кастомизация символа заполнения

Поведение placeholder определяется параметром placeholder:

Inputmask({
  mask: "hh:hh:hh:hh:hh:hh",
  placeholder: "_",
  definitions: {
    h: {
      validator: "[0-9A-Fa-f]",
      casing: "upper"
    }
  }
}).mask(element);

Заполнитель формирует визуальный шаблон фиксированной длины даже при отсутствии введённых данных.


Обработка вставки и нормализация входа

При вставке MAC-адресов из буфера обмена Inputmask выполняет нормализацию:

  • удаление лишних символов
  • преобразование разделителей к формату маски
  • приведение к регистру согласно casing
  • распределение символов по позициям маски

Строка вида:

00-1a-2b-3c-4d-5e

преобразуется в:

00:1A:2B:3C:4D:5E при соответствующей конфигурации.


Защита от некорректных символов

Валидация символов осуществляется на уровне definitions:

definitions: {
  h: {
    validator: "[0-9A-Fa-f]"
  }
}

Любой ввод вне диапазона шестнадцатеричных символов блокируется до попадания в модель значения.


Расширенные сценарии маскирования

В системах учёта сетевых интерфейсов встречаются дополнительные ограничения:

  • запрет multicast-битов
  • фиксирование OUI-префиксов
  • разделение vendor/device части

Inputmask не реализует семантическую валидацию MAC-адреса, однако может сочетаться с внешней проверкой, сохраняя форматный контроль на уровне ввода.


Интеграция с формами

MAC-адрес как поле формы обычно привязывается к DOM-элементу input. Маска применяется на этапе инициализации компонента, после чего поведение поля полностью управляется Inputmask:

  • обработка keydown / input
  • контроль курсора
  • форматирование отображаемого значения
  • синхронизация с value поля

Ограничения формата Inputmask

При использовании масок MAC-адресов проявляются следующие ограничения:

  • невозможность семантической проверки допустимости MAC (только формат)
  • ограниченность сложной логики условий
  • фиксированность структуры при вводе

Эти ограничения компенсируются внешними валидаторами и серверной проверкой данных.