Алиасы в Inputmask представляют собой именованные конфигурации масок. Вместо постоянного повторения одинаковых параметров можно один раз определить собственный алиас, а затем использовать его во всех частях приложения.
Пользовательские алиасы особенно полезны в следующих ситуациях:
Базовое применение выглядит следующим образом:
Inputmask.extendAliases({
articleCode: {
mask: "AAA-9999",
placeholder: "_"
}
});
Inputmask("articleCode").mask("#product");
После регистрации алиаса "articleCode" он становится
полноценным встроенным типом маски.
Создание пользовательских алиасов выполняется через:
Inputmask.extendAliases({...});
Метод принимает объект, где:
Пример:
Inputmask.extendAliases({
phoneKz: {
mask: "+7 (999) 999-99-99"
},
skuCode: {
mask: "SKU-999999"
}
});
Использование:
Inputmask("phoneKz").mask("#phone");
Inputmask("skuCode").mask("#sku");
Пользовательский алиас поддерживает практически все параметры Inputmask.
Стандартная структура:
Inputmask.extendAliases({
customAlias: {
mask: "",
placeholder: "",
greedy: false,
definitions: {},
oncomplete: function () {},
onincomplete: function () {},
validator: function () {},
postValidation: function () {}
}
});
Внутри алиаса можно использовать:
Inputmask.extendAliases({
contractNumber: {
mask: "CNT-9999-9999"
}
});
Использование:
Inputmask("contractNumber").mask("#contract");
Результат:
CNT-1234-5678
Inputmask.extendAliases({
serialNumber: {
mask: "SN-999999",
placeholder: "X"
}
});
Ввод будет отображаться так:
SN-XXXXXX
Inputmask.extendAliases({
productCode: {
mask: "P-LL-999",
definitions: {
"L": {
validator: "[A-Z]",
casing: "upper"
}
}
}
});
Примеры:
P-AB-123
P-ZX-999
Алиас может быть основан не только на mask, но и на
regex.
Inputmask.extendAliases({
hexColor: {
regex: "^#[0-9A-Fa-f]{6}$"
}
});
Использование:
Inputmask("hexColor").mask("#color");
Допустимые значения:
#FFAA00
#00ff99
Inputmask.extendAliases({
upperArticle: {
mask: "AAAA-9999",
casing: "upper"
}
});
Ввод:
abcd1234
Автоматически преобразуется в:
ABCD-1234
Inputmask.extendAliases({
evenCode: {
mask: "9999",
postValidation: function(buffer) {
const value = parseInt(buffer.join(""));
return value % 2 === 0;
}
}
});
Допустимые значения:
2468
4000
8888
Недопустимые:
1357
1111
Inputmask.extendAliases({
employeeId: {
mask: "EMP-9999",
oncomplete: function() {
console.log("ID заполнен");
},
onincomplete: function() {
console.log("ID заполнен не полностью");
}
}
});
Inputmask.extendAliases({
dynamicPhone: {
mask: function() {
return [
"+7 (999) 999-99-99",
"+1 (999) 999-9999"
];
}
}
});
Inputmask автоматически выберет подходящий шаблон.
Алиасы могут наследовать существующие конфигурации.
Inputmask.extendAliases({
shortDate: {
alias: "datetime",
inputFormat: "dd/mm/yyyy"
}
});
Использование:
Inputmask("shortDate").mask("#date");
Inputmask.extendAliases({
customCurrency: {
alias: "numeric",
groupSeparator: " ",
radixPoint: ",",
digits: 2,
prefix: "₸ "
}
});
Результат:
₸ 120 500,50
Inputmask.extendAliases({
localPhone: {
alias: "phone",
placeholder: "*",
clearIncomplete: true
}
});
Inputmask.extendAliases({
trimSpaces: {
mask: "999999",
onBeforeMask: function(value) {
return value.trim();
}
}
});
Inputmask.extendAliases({
cleanCode: {
mask: "999-999",
onUnMask: function(maskedValue, unmaskedValue) {
return unmaskedValue;
}
}
});
Inputmask.extendAliases({
secureProductCode: {
mask: "AA-9999-***",
definitions: {
"*": {
validator: "[A-Za-z0-9]"
}
},
casing: "upper",
placeholder: "_",
clearIncomplete: true,
oncomplete: function() {
console.log("Код принят");
}
}
});
Допустимый результат:
AB-1234-X9Q
Inputmask.extendAliases({
baseMoney: {
alias: "numeric",
digits: 2,
radixPoint: "."
},
dollarMoney: {
alias: "baseMoney",
prefix: "$ "
},
euroMoney: {
alias: "baseMoney",
prefix: "€ "
}
});
Inputmask.extendAliases({
phoneRu: {
mask: "+7 (999) 999-99-99"
},
phoneUs: {
mask: "+1 (999) 999-9999"
},
phoneDe: {
mask: "+49 9999 999999"
}
});
function getAlias(country) {
switch(country) {
case "ru":
return "phoneRu";
case "us":
return "phoneUs";
case "de":
return "phoneDe";
}
}
Inputmask(getAlias("ru")).mask("#phone");
Inputmask.extendAliases({
employeeNumber: {
mask: "EMP-99999"
},
warehouseCode: {
mask: "WH-999"
},
invoiceNumber: {
mask: "INV-999999"
},
departmentCode: {
mask: "DEP-AAA"
}
});
Преимущества такого подхода:
// finance.aliases.js
Inputmask.extendAliases({
ibanCode: {
mask: "AA99 9999 9999 9999"
}
});
// crm.aliases.js
Inputmask.extendAliases({
customerId: {
mask: "CUS-999999"
}
});
Inputmask.extendAliases({
numeric: {
mask: "999"
}
});
Такой код переопределит встроенный алиас numeric.
Это может привести к непредсказуемому поведению.
Плохой пример:
validator: function(chrs) {
// сложные вычисления
// сетевые запросы
// тяжёлая логика
}
Validator вызывается очень часто, поэтому тяжёлые операции ухудшают производительность.
Неправильно:
Inputmask.extendAliases({
phone1: {
mask: "+7 (999) 999-99-99",
placeholder: "_"
},
phone2: {
mask: "+7 (999) 999-99-99",
placeholder: "_"
}
});
Лучше:
Inputmask.extendAliases({
basePhone: {
mask: "+7 (999) 999-99-99",
placeholder: "_"
},
officePhone: {
alias: "basePhone"
},
mobilePhone: {
alias: "basePhone"
}
});
/masks
finance.aliases.js
crm.aliases.js
logistics.aliases.js
common.aliases.js
Рекомендуется:
invoiceNumber
employeeId
warehouseCode
currencyKzt
Нежелательно:
mask1
test
abc
myMask
Имя алиаса должно отражать его назначение.
Inputmask.extendAliases({
configurableCode: {
mask: function(opts) {
return opts.template;
}
}
});
Использование:
Inputmask({
alias: "configurableCode",
template: "AAA-999"
}).mask("#code");
Inputmask.extendAliases({
cleanPhone: {
mask: "+7 (999) 999-99-99",
removeMaskOnSubmit: true
}
});
При отправке формы:
79991234567
Inputmask.extendAliases({
emailStrict: {
alias: "email",
regex: "^[^@]+@company\\.com$"
}
});
Допустимо:
user@company.com
Недопустимо:
user@gmail.com
document.addEventListener("DOMContentLoaded", () => {
Inputmask.extendAliases({
userCode: {
mask: "USR-9999"
}
});
Inputmask("userCode").mask("#user");
});
export const aliases = {
employeeId: {
mask: "EMP-99999"
},
taxNumber: {
mask: "TAX-999999"
}
};
Регистрация:
Inputmask.extendAliases(aliases);
Наиболее затратные элементы:
Оптимизация:
useEffect(() => {
Inputmask.extendAliases({
reactPhone: {
mask: "+7 (999) 999-99-99"
}
});
Inputmask("reactPhone").mask(inputRef.current);
}, []);
mounted() {
Inputmask.extendAliases({
vueCode: {
mask: "VUE-9999"
}
});
Inputmask("vueCode").mask(this.$refs.code);
}
Inputmask.extendAliases({
uuidMask: {
mask: "********-****-****-****-************",
definitions: {
"*": {
validator: "[0-9a-fA-F]"
}
},
casing: "lower"
}
});
Inputmask.extendAliases({
jwtSegment: {
regex: "^[A-Za-z0-9\\-_]+$"
}
});
Inputmask.isValid(
"EMP-1234",
{
alias: "employeeId"
}
);
const im = new Inputmask("cleanPhone");
im.mask("#phone");
console.log(
im.unmaskedvalue()
);
console.log(Inputmask.prototype.aliases);
const instance = new Inputmask("employeeId");
console.log(instance.opts);
Inputmask.extendAliases({
companyPhone: {
mask: "+7 (999) 999-99-99",
clearIncomplete: true
},
companyEmail: {
alias: "email"
},
employeeCard: {
mask: "EMP-999999"
},
warehouseItem: {
mask: "WH-AAA-9999",
casing: "upper"
},
moneyKzt: {
alias: "numeric",
groupSeparator: " ",
radixPoint: ",",
digits: 2,
prefix: "₸ "
}
});