Библиотека Inputmask предназначена для создания масок ввода в HTML-формах. Она позволяет контролировать формат пользовательских данных непосредственно в процессе ввода, предотвращая появление некорректных значений и упрощая взаимодействие с интерфейсом.
Маскирование ввода особенно востребовано при работе с телефонными номерами, датами, временем, банковскими картами, почтовыми индексами, денежными значениями, идентификаторами и другими строго структурированными данными.
Одно из ключевых преимуществ Inputmask заключается в предотвращении ошибок ещё до отправки формы.
Без маски пользователь может вводить данные в произвольном формате:
<input type="text">
В результате возможны варианты:
89991234567
+7 9991234567
999-123-45-67
телефон: 9991234567
Маска стандартизирует ввод:
Inputmask("+7 (999) 999-99-99").mask("#phone");
Теперь формат всегда будет одинаковым:
+7 (999) 123-45-67
Это обеспечивает:
Inputmask делает формы более предсказуемыми и понятными.
При вводе пользователь сразу видит:
Пример маски даты:
Inputmask("99/99/9999").mask("#date");
Поле отображается так:
__/__/____
Такой подход уменьшает неопределённость и ускоряет заполнение формы.
Традиционная проверка формы часто выполняется после отправки данных:
if (!phone.match(/^\+7 \(\d{3}\) \d{3}-\d{2}-\d{2}$/)) {
alert("Неверный формат");
}
Проблема такого подхода заключается в том, что ошибка обнаруживается слишком поздно.
Inputmask предотвращает саму возможность неправильного ввода:
Inputmask("+7 (999) 999-99-99").mask("#phone");
Пользователь физически не сможет ввести лишние символы в запрещённые позиции.
Это особенно важно в:
Inputmask поддерживает множество форматов ввода.
Inputmask("+7 (999) 999-99-99").mask("#phone");
Inputmask("99/99/9999").mask("#date");
Inputmask("99:99").mask("#time");
Inputmask("9999 9999 9999 9999").mask("#card");
Inputmask("currency", {
prefix: "$ "
}).mask("#price");
Inputmask({
alias: "email"
}).mask("#email");
Alias — это встроенные шаблоны масок.
Пример:
Inputmask({
alias: "datetime"
}).mask("#date");
Библиотека уже содержит готовые решения для:
Это значительно ускоряет разработку.
Без Inputmask разработчику часто приходится самостоятельно:
Пример ручной обработки:
input.addEventListener("input", (e) => {
let value = e.target.value.replace(/\D/g, "");
if (value.length > 11) {
value = value.slice(0, 11);
}
e.target.value = value;
});
Inputmask берёт эти задачи на себя:
Inputmask("+7 (999) 999-99-99").mask(input);
Код становится:
Inputmask позволяет изменять формат ввода в зависимости от данных.
Пример выбора маски по стране:
Inputmask({
mask: [
"+1 (999) 999-9999",
"+44 99 9999 9999",
"+7 (999) 999-99-99"
]
}).mask("#phone");
Библиотека автоматически определяет подходящий шаблон.
Это особенно полезно для:
Inputmask умеет работать через regex-маски.
Пример:
Inputmask({
regex: "[A-Za-z]{3}-[0-9]{4}"
}).mask("#code");
Допустимые значения:
ABC-1234
XYZ-9876
Недопустимые:
12A-1234
AAAA-123
Такой механизм обеспечивает более сложную и точную валидацию.
Можно создавать собственные определения символов.
Пример:
Inputmask.extendDefinitions({
"~": {
validator: "[+-]"
}
});
Использование:
Inputmask("~999").mask("#number");
Допустимые значения:
+123
-456
Ручная реализация масок часто сопровождается проблемами:
Inputmask автоматически управляет caret-позицией.
Пример:
Inputmask("99/99/9999").mask("#date");
При вводе:
12/0
курсор автоматически перемещается после символа /.
Это существенно улучшает UX.
Многие самописные маски некорректно работают с paste-событиями.
Inputmask корректно обрабатывает вставку:
89991234567
и автоматически преобразует её:
+7 (999) 123-45-67
Библиотека грамотно обрабатывает:
Пример:
Inputmask("9999 9999 9999 9999").mask("#card");
При удалении:
1234 5678| 9012 3456
служебные пробелы сохраняют корректную структуру поля.
Inputmask адаптирован под:
Это критически важно, поскольку большая часть форм сегодня заполняется со смартфонов.
Inputmask можно использовать вместе с:
import Inputmask from "inputmask";
import { useEffect, useRef } from "react";
function PhoneInput() {
const ref = useRef(null);
useEffect(() => {
Inputmask("+7 (999) 999-99-99").mask(ref.current);
}, []);
return <input ref={ref} />;
}
Для использования не требуется фреймворк.
Пример подключения:
<script src="inputmask.min.js"></script>
Использование:
Inputmask("99/99/9999").mask("#date");
Это делает библиотеку универсальной.
Inputmask предоставляет множество параметров.
Inputmask("99/99/9999", {
placeholder: "д"
}).mask("#date");
Результат:
дд/дд/дддд
Inputmask("99/99/9999", {
clearIncomplete: true
}).mask("#date");
Незаполненное поле автоматически очищается.
Inputmask("99/99/9999", {
showMaskOnHover: false
}).mask("#date");
Маска появляется только при фокусе.
Управление жадностью маски:
Inputmask({
mask: "9{1,10}",
greedy: false
}).mask("#number");
Inputmask умеет работать с optional-блоками.
Пример:
Inputmask("(999) 999-9999[ x99999]").mask("#phone");
Допустимые значения:
(123) 456-7890
(123) 456-7890 x123
Пример:
Inputmask({
mask: "9",
repeat: 10
}).mask("#code");
Маска автоматически создаёт десять цифровых позиций.
Inputmask оптимизирован для работы с большим количеством полей.
Преимущества:
Это важно для:
Библиотека поддерживает:
Это избавляет от необходимости писать отдельную логику под разные платформы.
Использование единой библиотеки масок:
Вместо десятков обработчиков:
phoneInput.addEventListener(...);
dateInput.addEventListener(...);
cardInput.addEventListener(...);
можно использовать единый подход:
Inputmask(...).mask(...);
Хотя Inputmask не заменяет серверную валидацию, библиотека помогает:
Пример:
Inputmask("9999-9999-9999").mask("#serial");
Пользователь не сможет ввести:
<script>
вместо ожидаемого идентификатора.
Inputmask поддерживает:
Пример денежной маски:
Inputmask("currency", {
radixPoint: ",",
groupSeparator: " ",
digits: 2
}).mask("#price");
Результат:
1 234 567,89
Пример:
Inputmask("decimal", {
digits: 2,
digitsOptional: false
}).mask("#number");
Допустимое значение:
12345.67
Библиотека автоматически:
Inputmask позволяет удалять маску динамически.
const im = new Inputmask("99/99/9999");
im.mask("#date");
im.remove();
Это полезно в сложных интерфейсах с изменяемыми формами.
Получение очищенного значения:
const value = document.querySelector("#phone").inputmask.unmaskedvalue();
Результат:
79991234567
Получение форматированного значения:
const formatted = document.querySelector("#phone").value;
Результат:
+7 (999) 123-45-67
Самописные маски часто содержат проблемы:
Inputmask уже решает эти задачи и протестирован на большом количестве сценариев.
Это снижает: