Алиасы в Inputmask позволяют скрывать сложную конфигурацию маски за
коротким именем. Встроенные алиасы (datetime,
numeric, currency, email,
url, ip и другие) покрывают типовые сценарии,
однако в реальных проектах часто возникает необходимость изменить их
поведение без полного переписывания логики.
Расширение существующего алиаса решает несколько задач:
Механизм расширения особенно полезен при работе с большими формами, где десятки полей используют похожие правила.
Для расширения существующего алиаса используется метод
Inputmask.extendAliases().
Базовый синтаксис:
Inputmask.extendAliases({
myAlias: {
alias: "datetime",
inputFormat: "dd.mm.yyyy"
}
});
Здесь:
myAlias — имя нового алиаса;alias: "datetime" — указание родительского алиаса;После регистрации:
Inputmask("myAlias").mask("#date");
При расширении алиаса новый объект получает:
Переопределяются только указанные свойства.
Пример:
Inputmask.extendAliases({
shortDate: {
alias: "datetime",
inputFormat: "dd.mm.yy"
}
});
Все остальные настройки datetime сохраняются
автоматически.
Одна из самых распространённых задач — изменение стандартного формата.
Inputmask.extendAliases({
ruDate: {
alias: "datetime",
inputFormat: "dd.mm.yyyy",
placeholder: "дд.мм.гггг"
}
});
Использование:
Inputmask("ruDate").mask("#birthdate");
Поле будет автоматически:
Расширенный алиас может включать дополнительные ограничения.
Inputmask.extendAliases({
modernYear: {
alias: "datetime",
inputFormat: "dd.mm.yyyy",
min: "01.01.2000",
max: "31.12.2099"
}
});
Такой подход полезен:
Встроенные алиасы часто используют универсальные placeholder-символы. Расширение позволяет стандартизировать отображение.
Inputmask.extendAliases({
customCurrency: {
alias: "currency",
placeholder: "0"
}
});
Или:
Inputmask.extendAliases({
readableDate: {
alias: "datetime",
inputFormat: "dd/mm/yyyy",
placeholder: "ДД/ММ/ГГГГ"
}
});
Алиасы numeric, decimal,
currency особенно часто расширяются в корпоративных
системах.
Inputmask.extendAliases({
kzCurrency: {
alias: "currency",
prefix: "₸ ",
groupSeparator: " ",
radixPoint: ".",
digits: 2,
autoGroup: true,
digitsOptional: false,
removeMaskOnSubmit: true
}
});
Особенности:
Стандартный email можно адаптировать под внутренние
корпоративные ограничения.
Inputmask.extendAliases({
corporateEmail: {
alias: "email",
regex: "^[a-zA-Z0-9._%+-]+@company\\.com$"
}
});
Теперь будут разрешены только адреса домена
company.com.
При расширении алиасов часто применяется предварительная обработка вставляемых данных.
Inputmask.extendAliases({
phoneClean: {
alias: "phone",
onBeforePaste: function (value) {
return value.replace(/[^\d]/g, "");
}
}
});
Такая обработка:
Расширенный алиас может содержать собственные функции.
Inputmask.extendAliases({
uppercaseEmail: {
alias: "email",
onBeforePaste: function (value) {
return value.toLowerCase();
},
onBeforeWrite: function (event, buffer) {
console.log(buffer.join(""));
}
}
});
Параметр greedy влияет на отображение необязательных
частей маски.
Inputmask.extendAliases({
flexiblePhone: {
alias: "phone",
greedy: false
}
});
При false необязательные секции отображаются только при
необходимости.
Расширение может одновременно использовать готовый алиас и собственную маску.
Inputmask.extendAliases({
serialNumber: {
alias: "numeric",
mask: "SN-999999"
}
});
Здесь:
numeric;mask.postValidation позволяет внедрить дополнительную
проверку после основной валидации.
Inputmask.extendAliases({
evenNumber: {
alias: "numeric",
postValidation: function (buffer) {
const value = parseInt(buffer.join(""));
return value % 2 === 0;
}
}
});
Теперь будут приниматься только чётные числа.
Телефонные маски часто требуют локальной адаптации.
Inputmask.extendAliases({
kzPhone: {
alias: "phone",
mask: "+7 (799) 999-99-99"
}
});
Или:
Inputmask.extendAliases({
officePhone: {
alias: "phone",
mask: "+7 (999) 999-99-99 доб. 9999"
}
});
Алиасы могут наследоваться цепочкой.
Inputmask.extendAliases({
baseCurrency: {
alias: "currency",
groupSeparator: " "
},
tengeCurrency: {
alias: "baseCurrency",
prefix: "₸ "
}
});
Получается многоуровневая архитектура конфигураций.
Это особенно полезно:
Расширенный алиас может изменять определения символов.
Inputmask.extendAliases({
hexColor: {
mask: "#******",
definitions: {
"*": {
validator: "[0-9A-Fa-f]"
}
}
}
});
Поддерживаются значения:
#FFFFFF
#000000
#A1B2C3
Расширение может использовать регулярные выражения.
Inputmask.extendAliases({
productCode: {
regex: "[A-Z]{3}-\\d{4}"
}
});
Подход подходит для:
Параметр jitMasking включает ленивое отображение
маски.
Inputmask.extendAliases({
smartDate: {
alias: "datetime",
inputFormat: "dd.mm.yyyy",
jitMasking: true
}
});
Маска отображается постепенно по мере ввода.
insertMode управляет поведением замены символов.
Inputmask.extendAliases({
overwriteDate: {
alias: "datetime",
insertMode: false
}
});
При false новые символы заменяют существующие.
Расширение позволяет организовать локализованные алиасы.
Inputmask.extendAliases({
usDate: {
alias: "datetime",
inputFormat: "mm/dd/yyyy"
},
euDate: {
alias: "datetime",
inputFormat: "dd.mm.yyyy"
},
isoDate: {
alias: "datetime",
inputFormat: "yyyy-mm-dd"
}
});
В крупных приложениях расширенные алиасы обычно выносятся в отдельный модуль.
// masks.js
Inputmask.extendAliases({
appDate: {
alias: "datetime",
inputFormat: "dd.mm.yyyy"
},
appCurrency: {
alias: "currency",
prefix: "₸ "
}
});
Далее:
import "./masks.js";
Inputmask("appDate").mask("#date");
Параметр autoUnmask автоматически извлекает чистое
значение.
Inputmask.extendAliases({
cleanPhone: {
alias: "phone",
autoUnmask: true
}
});
Значение поля:
7771234567
вместо:
+7 (777) 123-45-67
Некоторые формы требуют корректной обработки пустых значений.
Inputmask.extendAliases({
nullableCurrency: {
alias: "currency",
nullable: true
}
});
Поле может возвращать null вместо пустой строки.
Расширенные алиасы удобно использовать через HTML.
<input data-inputmask-alias="ruDate">
Инициализация:
Inputmask().mask(document.querySelectorAll("input"));
Если дочерний алиас переопределяет свойство, приоритет всегда получает дочерняя конфигурация.
Inputmask.extendAliases({
parentAlias: {
placeholder: "_"
},
childAlias: {
alias: "parentAlias",
placeholder: "*"
}
});
Результат:
**
а не:
__
Алиасы могут содержать вычисляемую конфигурацию.
Inputmask.extendAliases({
dynamicCurrency: {
alias: "currency",
onBeforeMask: function (value) {
return parseFloat(value).toFixed(2);
}
}
});
Символ пропуска необязательной части можно изменить.
Inputmask.extendAliases({
customOptional: {
alias: "phone",
skipOptionalPartCharacter: " "
}
});
В крупных проектах обычно формируется иерархия:
baseInput
├── baseNumeric
│ ├── currency
│ ├── percentage
│ └── quantity
│
├── baseDate
│ ├── shortDate
│ ├── longDate
│ └── isoDate
│
└── basePhone
├── mobilePhone
└── officePhone
Преимущества:
Ошибка:
Inputmask.extendAliases({
myDate: {
inputFormat: "dd.mm.yyyy"
}
});
Без alias объект не наследует логику
datetime.
Правильно:
Inputmask.extendAliases({
myDate: {
alias: "datetime",
inputFormat: "dd.mm.yyyy"
}
});
Нельзя одновременно полагаться на несовместимые правила.
Проблемный пример:
Inputmask.extendAliases({
brokenAlias: {
mask: "9999",
regex: "[A-Z]+"
}
});
mask и regex будут конкурировать.
Некоторые встроенные алиасы содержат сложную внутреннюю логику.
Например, у datetime есть:
Полная замена внутренних обработчиков может нарушить работу маски.
Расширенные алиасы:
Особенно заметен эффект в: