Обработка вставки текста

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

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

Ключевая особенность заключается в том, что преобразование происходит не после завершения ввода, а непрерывно. Это создаёт эффект «самоформатирующегося» поля, в котором пользователь всегда видит корректное представление данных.

Маски как основа автоформатирования

Маска представляет собой строку, где специальные символы задают тип данных, а литералы формируют фиксированную структуру. Например:

  • 9 — цифровой символ
  • a — буквенный символ
  • * — любой символ

Литералы (например, скобки, дефисы, пробелы) автоматически вставляются библиотекой в процессе ввода.

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

Вставка символов и позиционирование курсора

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

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

+7 (999) 999-99-99

ввод цифр автоматически сопровождается добавлением скобок, пробелов и дефисов, при этом курсор остаётся на следующей свободной позиции.

Шаблоны, placeholder и поведение пустых значений

Автоформатирование тесно связано с механизмом placeholder. В незаполненных позициях маски отображаются символы-заглушки, которые визуально подсказывают структуру данных.

Inputmask поддерживает поведение, при котором:

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

Это создаёт эффект динамического шаблона, который всегда отражает ожидаемую структуру данных.

Автоматическое форматирование при вводе посимвольно

Каждое нажатие клавиши инициирует цикл обработки:

  1. Получение текущего значения поля.
  2. Определение позиции ввода.
  3. Проверка символа по правилам маски.
  4. Вставка или отклонение символа.
  5. Пересборка итоговой строки.
  6. Корректировка курсора.

В результате формируется непрерывный поток преобразований, где пользовательский ввод никогда не существует в «сыром» виде внутри поля.

Обработка удаления и редактирования внутри маски

Удаление символов в маскированных полях не является прямым удалением строки. Вместо этого Inputmask пересчитывает состояние маски и восстанавливает корректную структуру.

Особенности поведения:

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

Это предотвращает разрушение структуры маски даже при произвольных действиях пользователя.

Вставка через paste и нормализация данных

При вставке данных Inputmask выполняет дополнительный этап нормализации. Вставляемая строка может не соответствовать маске, поэтому применяется алгоритм фильтрации:

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

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

Алиасы и автоматическое форматирование сложных типов

Алиасы представляют собой преднастроенные маски для типовых данных: телефоны, даты, валюты, IP-адреса.

Автоматическое форматирование в алиасах включает дополнительную логику:

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

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

Кастомные определения и их влияние

Inputmask позволяет определять собственные правила ввода через definitions. Это расширяет механизм автоформатирования, добавляя новые типы символов.

Пример логики:

  • пользовательский символ может соответствовать сложному regex;
  • допускается ограничение диапазона значений;
  • возможно создание контекстных правил (например, зависимость от соседних символов).

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

Предобработка значений

Перед началом работы маски Inputmask может преобразовывать исходное значение. Это особенно важно при инициализации уже заполненных полей.

Используются механизмы:

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

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

Работа с числовыми и датами масками

Числовые маски используют отдельную логику автоформатирования, учитывающую:

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

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

Дата и время обрабатываются как структурированные последовательности:

  • день;
  • месяц;
  • год;
  • часы и минуты.

При вводе каждого сегмента Inputmask ограничивает диапазон допустимых значений, предотвращая появление некорректных дат.

Типичные ошибки и нюансы поведения автоформатирования

Автоматическое форматирование может приводить к ряду специфических эффектов, которые обусловлены строгой логикой маски:

  • конфликт между пользовательским вводом и жёсткими литералами;
  • неожиданные перестановки символов при вставке фрагментов;
  • невозможность ввода значений, не предусмотренных маской;
  • различия поведения между мобильными и десктопными клавиатурами;
  • влияние IME-режимов ввода (например, восточные языки).

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