Поведение поля ввода в браузере определяется не только набором символов маски, но и направлением текста, которое задаётся языковой системой и свойствами отображения. В контексте Inputmask управление направлением ввода становится критически важным при работе с локализациями, двунаправленным текстом и числовыми значениями.
В веб-интерфейсах используется две основные модели направления:
LTR (Left-to-Right) Традиционное направление для латиницы и большинства европейских языков. Символы добавляются слева направо, каретка движется вправо.
RTL (Right-to-Left) Используется в арабском, иврите, персидском и ряде других письменностей. Ввод начинается справа, а визуальное направление текста инвертируется относительно LTR.
HTML-атрибут dir определяет направление отображения:
<input dir="ltr">
<input dir="rtl">
Однако направление отображения не всегда совпадает с логикой ввода маски, особенно при использовании форматированных значений (телефоны, валюты, коды).
Маскирование ввода предполагает контроль позиции символов, автоматическое добавление разделителей и управление кареткой. При смене направления возникают следующие проблемы:
Inputmask решает эти проблемы через параметры конфигурации, влияющие на выравнивание текста и направление ввода.
Ключевой параметр, влияющий на визуальное направление в масках —
rightAlign.
Inputmask("999 999 999").mask(selector, {
rightAlign: true
});
При включении:
Особенности:
Параметр numericInput изменяет принцип заполнения маски
для числовых значений:
Inputmask("9{1,3}[.99]").mask(selector, {
numericInput: true
});
Поведение:
Это особенно важно для:
При работе с RTL-языками стандартного dir="rtl"
недостаточно. Маска должна учитывать:
Пример HTML:
<input id="phone" dir="rtl">
Пример маски:
Inputmask("+99 999 999 999").mask("#phone");
Без дополнительных настроек поведение может оставаться LTR по логике ввода, несмотря на RTL-отображение.
Совместное использование двух параметров применяется для финансовых интерфейсов:
Inputmask("currency", {
rightAlign: true,
numericInput: true
}).mask(selector);
Результат:
Такой подход снижает рассогласование между пользовательским ожиданием и внутренним представлением данных.
Каретка (cursor) в маскированных полях является наиболее чувствительным элементом при смене направления.
В LTR:
В RTL:
Inputmask использует внутренние механизмы позиционирования каретки, учитывая:
rightAlign и numericInputРазделители (пробелы, дефисы, скобки) ведут себя по-разному в зависимости от направления:
| Тип символа | LTR поведение | RTL поведение |
|---|---|---|
| пробел | добавляется справа | может визуально смещаться влево |
| дефис | фиксируется между сегментами | сохраняет позицию, но инвертирует восприятие |
| скобки | обрамляют слева направо | могут требовать симметричной обработки |
При неправильной конфигурации направление может разрушать структуру маски, особенно в телефонных и идентификационных форматах.
В многоязычных интерфейсах направление ввода часто зависит от контекста:
Конфигурация масок должна учитывать семантику данных, а не только язык интерфейса.
1. RTL-интерфейс + LTR-данные Поле отображается справа налево, но ввод остаётся LTR, что приводит к визуальному несоответствию.
2. numericInput без rightAlign Число вводится в обратном порядке, но остаётся левое выравнивание.
3. rightAlign без учета HTML dir Визуальное выравнивание корректно, но каретка ведёт себя нестабильно при вставке.
Корректная работа направления в масках обычно строится по слоям:
dir) задаёт базовую визуальную ориентациюrightAlign и numericInput
корректируют поведение каретки и порядка вводаРазделение этих уровней позволяет избежать конфликтов между отображением и внутренней логикой маски.