createMask
Создаёт маску по шаблону. Строку или массив можно передавать прямо в mask и attach — createMask нужен для своих токенов, подготовки ввода и своего значения без маски.
Сигнатура
ts
function createMask(options: MaskOptions | string | string[]): Mask
interface MaskOptions {
pattern: string | string[] | ((input: string) => string);
tokens?: Record<string, { pattern: RegExp; transform?: 'upper' | 'lower' | ((char: string) => string) }>;
prepare?: (input: string) => string;
allow?: (raw: string, char: string) => boolean;
validate?: (result: MaskResult) => boolean;
output?: (result: MaskResult) => string;
}| Опция | Описание |
|---|---|
pattern | Шаблон, массив шаблонов (берётся первый подходящий) или функция от ввода — см. Шаблоны |
tokens | Свои токены в дополнение к 9, a, * |
prepare | Подготовка ввода перед форматированием — например, 8 → +7 в начале телефона |
allow | Можно ли принять символ, учитывая уже введённое (raw). Так маски дат не пропускают 32-е число |
validate | Правильно ли заполненное значение — результат попадает в valid и isValid. Вызывается, только когда маска заполнена |
output | Значение без маски. По умолчанию — введённые символы без литералов (result.raw) |
MaskResult — { value, raw, complete, slots, overflow }: отформатированное значение, введённые символы, заполнена ли маска, позиции введённых символов, остались ли лишние символы.
Пример
ts
// order number: 2 letters + 6 digits, stored without the dash
const orderNumber = createMask({
pattern: 'LL-999999',
tokens: { L: { pattern: /[a-z]/i, transform: 'upper' } },
});
mask('ab123456', orderNumber); // 'AB-123456'
unmask('AB-123456', orderNumber); // 'AB123456'