Встроенные алиасы

В библиотеке Inputmask алиасы представляют собой предустановленные конфигурации масок, инкапсулирующие типовые сценарии ввода данных. Алиас заменяет необходимость ручной сборки сложной маски, объединяя правила форматирования, проверки и поведения курсора в единую именованную сущность.

Алиасы применяются через параметр alias при инициализации маски:

Inputmask({
  alias: "email"
}).mask(inputElement);

Либо через data-атрибут:

<input data-inputmask="'alias': 'email'" />

Основная идея заключается в том, что алиас задаёт высокоуровневый тип данных, а внутренняя реализация преобразует его в набор правил Inputmask.


Архитектура алиасов

Каждый алиас в Inputmask — это объект конфигурации, зарегистрированный в системе alias definitions. Он содержит:

  • базовую маску или набор масок;
  • правила определения допустимых символов;
  • ограничения по длине;
  • обработчики событий ввода;
  • логические правила форматирования;
  • поведение при вставке и удалении символов.

Алиасы могут наследовать друг друга. Это позволяет создавать сложные композиции на основе базовых типов.

Пример концептуального наследования:

Inputmask.extendAliases({
  "custom-phone": {
    alias: "phone",
    countryCode: "+7",
    mask: "+7 (999) 999-99-99"
  }
});

Алиас phone

Алиас phone предназначен для ввода телефонных номеров с поддержкой различных национальных форматов.

Основные свойства:

  • поддержка региональных масок;
  • автоматическая вставка разделителей;
  • обработка кода страны;
  • адаптация под длину номера;
  • возможность переключения формата.

Пример использования:

Inputmask({
  alias: "phone"
}).mask(document.querySelector("#phone"));

Расширенная конфигурация:

Inputmask({
  alias: "phone",
  countryCode: "+1",
  keepStatic: true
}).mask(input);

Поведение алиаса включает автоматическое форматирование при вводе и очистку некорректных символов.


Алиас email

Алиас email реализует проверку структуры электронного адреса на уровне ввода. Он не ограничивается простым регулярным выражением, а использует поэтапную проверку локальной и доменной частей.

Ключевые особенности:

  • разрешённые символы в локальной части;
  • контроль наличия @;
  • проверка доменных сегментов;
  • ограничение последовательностей точек;
  • адаптация под вставку текста.

Пример:

Inputmask({
  alias: "email"
}).mask(emailInput);

Внутренняя логика разбивает ввод на сегменты:

  • локальная часть;
  • символ @;
  • домен;
  • зона (TLD).

Каждый сегмент валидируется отдельно.


Алиас numeric

Алиас numeric используется для числового ввода с поддержкой форматов:

  • целые числа;
  • дробные значения;
  • отрицательные числа;
  • разделители тысяч;
  • кастомные десятичные символы.

Пример базовой настройки:

Inputmask({
  alias: "numeric"
}).mask(input);

Расширенная конфигурация:

Inputmask({
  alias: "numeric",
  groupSeparator: " ",
  radixPoint: ",",
  digits: 2,
  allowMinus: true
}).mask(input);

Внутреннее поведение включает:

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

Алиас currency

Алиас currency расширяет numeric, добавляя поддержку денежных форматов. Основная задача — представление чисел в финансовом виде с учётом локализации.

Особенности:

  • символ валюты;
  • позиционирование символа (слева или справа);
  • форматирование тысячных групп;
  • фиксированное количество десятичных знаков;
  • округление при вводе.

Пример:

Inputmask({
  alias: "currency",
  prefix: "$ ",
  digits: 2,
  groupSeparator: ","
}).mask(input);

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


Алиас datetime

Алиас datetime предназначен для ввода даты и времени с контролем формата и валидностью календарных значений.

Поддерживаются форматы:

  • дата;
  • дата и время;
  • пользовательские шаблоны.

Пример:

Inputmask({
  alias: "datetime",
  inputFormat: "yyyy-mm-dd HH:MM"
}).mask(input);

Основные механизмы:

  • поэтапная проверка сегментов (год, месяц, день);
  • контроль диапазонов (например, месяц 1–12);
  • коррекция некорректных значений;
  • автоматическая подстановка разделителей.

При вводе происходит сегментирование строки и независимая обработка каждой части.


Алиас decimal

Алиас decimal специализируется на числах с плавающей точкой, отличаясь от numeric более строгой обработкой дробной части.

Характеристики:

  • фиксированная или плавающая точность;
  • поддержка отрицательных значений;
  • контроль radix point;
  • нормализация ввода.

Пример:

Inputmask({
  alias: "decimal",
  digits: 3,
  radixPoint: "."
}).mask(input);

Механизм работы:

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

Алиас ip

Алиас ip используется для ввода IP-адресов (IPv4 и частично IPv6 в расширенных конфигурациях).

Пример IPv4:

Inputmask({
  alias: "ip"
}).mask(input);

Логика:

  • сегментация по точкам;
  • ограничение диапазона 0–255;
  • запрет ведущих нулей (в зависимости от настроек);
  • автоматическая корректировка сегментов.

Каждый октет обрабатывается отдельно, что позволяет предотвращать ввод невалидных адресов на этапе набора.


Алиас mac

Алиас mac применяется для MAC-адресов сетевых устройств.

Пример:

Inputmask({
  alias: "mac"
}).mask(input);

Особенности:

  • фиксированное количество октетов;
  • поддержка разделителей : и -;
  • приведение символов к нижнему или верхнему регистру;
  • контроль длины каждой пары символов.

Алиасы с масками-расширениями

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

Пример расширенного алиаса:

Inputmask.extendAliases({
  "zip-extended": {
    mask: "99999[-9999]",
    greedy: false
  }
});

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


Приоритеты и переопределение алиасов

При наличии нескольких уровней конфигурации действует следующая иерархия:

  1. параметры, переданные в Inputmask({...});
  2. настройки алиаса;
  3. базовые настройки Inputmask;
  4. значения по умолчанию ядра библиотеки.

Переопределение алиаса возможно через extendAliases:

Inputmask.extendAliases({
  email: {
    greedy: false,
    clearIncomplete: true
  }
});

Изменённые алиасы начинают использоваться во всех новых экземплярах маски.


Комбинирование алиасов с опциями

Алиасы не изолированы от дополнительных параметров. Поведение может быть модифицировано внешними настройками:

Inputmask({
  alias: "numeric",
  rightAlign: false,
  clearMaskOnLostFocus: true
}).mask(input);

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


Механизм разрешения алиаса

При инициализации Inputmask выполняется:

  1. поиск алиаса в registry;
  2. загрузка базовой конфигурации;
  3. наложение пользовательских параметров;
  4. компиляция итоговой маски;
  5. инициализация обработчиков событий.

Этот процесс обеспечивает одинаковое поведение алиасов независимо от способа их подключения.


Поведение при вставке данных

Алиасы содержат встроенные правила обработки paste-событий:

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

Например, при вставке строки даты в datetime выполняется автоматическое разбиение по разделителям и корректировка значений.


Производные и кастомные алиасы

Создание кастомных алиасов основывается на расширении существующих:

Inputmask.extendAliases({
  "ru-phone": {
    alias: "phone",
    mask: "+7 (999) 999-99-99",
    countryCode: "+7"
  }
});

Такая структура позволяет формировать библиотеку доменных масок для конкретных проектов, сохраняя совместимость с ядром Inputmask.