Email-маски в библиотеке Inputmask используются для контроля ввода адресов электронной почты. Маска ограничивает допустимые символы, формирует структуру адреса и предотвращает появление некорректных значений ещё на этапе ввода.
В отличие от обычных строковых масок, email-маски работают с более сложными правилами:
@;Inputmask содержит встроенный alias email, который
реализует основные правила RFC-подобного ввода без необходимости ручного
описания сложного шаблона.
<input id="email">
Inputmask("email").mask("#email");
После подключения маски поле начинает контролировать структуру email-адреса.
Допустимые примеры:
user@example.com
admin@test.org
contact.mail@company.kz
Некорректные варианты будут блокироваться:
user@@mail.com
test@
@mail.com
Alias — это предустановленный набор правил.
Вместо сложной маски:
Inputmask({
mask: "*{1,64}[.*{1,64}]@*{1,255}[.*{2,6}]"
});
используется короткая запись:
Inputmask("email");
или:
Inputmask({
alias: "email"
});
Внутри alias уже определены:
@;Inputmask("email").mask(document.getElementById("email"));
Inputmask("email").mask(document.querySelector(".email-input"));
Inputmask("email").mask(document.querySelectorAll(".email"));
По умолчанию placeholder формируется автоматически.
Inputmask({
alias: "email",
placeholder: "_"
}).mask("#email");
Результат:
____@____.___
Inputmask({
alias: "email",
placeholder: ""
}).mask("#email");
Такой вариант часто используется в минималистичных интерфейсах.
Удаляет служебные символы при отправке формы.
Inputmask({
alias: "email",
removeMaskOnSubmit: true
}).mask("#email");
Для email это особенно полезно при комбинировании с дополнительными префиксами или кастомными масками.
Если адрес введён не полностью, поле очищается.
Inputmask({
alias: "email",
clearIncomplete: true
}).mask("#email");
Пример:
user@
После потери фокуса значение удаляется.
Email-адреса обычно отображаются в нижнем регистре.
Inputmask({
alias: "email",
casing: "lower"
}).mask("#email");
Ввод:
USER@MAIL.COM
Преобразуется в:
user@mail.com
const input = document.getElementById("email");
input.maxLength = 50;
Inputmask("email").mask(input);
Inputmask({
regex: ".{1,50}"
}).mask("#email");
Иногда стандартного alias недостаточно.
Inputmask({
regex: "[a-zA-Z0-9._%+-]+@gmail\\.com"
}).mask("#email");
Допустимо:
user@gmail.com
Недопустимо:
user@yahoo.com
.comInputmask({
regex: "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.com"
}).mask("#email");
Inputmask({
regex: "[a-zA-Z0-9._%+-]+@company\\.kz"
}).mask("#email");
Иногда требуется строго фиксированный шаблон.
Inputmask({
mask: "*{1,20}@company.com"
}).mask("#email");
Разрешены адреса:
admin@company.com
user@company.com
Запретятся:
admin@gmail.com
Стандартный alias email разрешает:
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789
._%+-
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789
-
.
Definitions позволяют создать собственные правила символов.
Inputmask({
definitions: {
"L": {
validator: "[a-zA-Z0-9]"
}
},
mask: "L{1,20}@L{1,20}.L{2,4}"
}).mask("#email");
Inputmask({
regex: "[a-zA-Z0-9._%+-]+@(gmail\\.com|yahoo\\.com|outlook\\.com)"
}).mask("#email");
Допустимо:
user@gmail.com
user@yahoo.com
const input = document.getElementById("email");
input.addEventListener("input", () => {
if (input.value.includes("@company")) {
Inputmask({
regex: "[a-zA-Z0-9._%+-]+@company\\.com"
}).mask(input);
}
});
Метод определяет, заполнена ли маска корректно.
const im = new Inputmask("email");
im.mask("#email");
const valid = im.isComplete();
const value = document
.getElementById("email")
.inputmask
.unmaskedvalue();
console.log(value);
Срабатывает после полного ввода email.
Inputmask({
alias: "email",
oncomplete: function () {
console.log("Email введён полностью");
}
}).mask("#email");
Inputmask({
alias: "email",
onincomplete: function () {
console.log("Email заполнен не полностью");
}
}).mask("#email");
Inputmask({
alias: "email",
oncleared: function () {
console.log("Поле очищено");
}
}).mask("#email");
<form id="form">
<input id="email">
<button type="submit">Отправить</button>
</form>
Inputmask({
alias: "email",
clearIncomplete: true
}).mask("#email");
document.getElementById("form")
.addEventListener("submit", function (event) {
const valid =
document.getElementById("email")
.inputmask
.isComplete();
if (!valid) {
event.preventDefault();
}
});
import Inputmask from "inputmask";
import { useEffect, useRef } from "react";
function App() {
const inputRef = useRef(null);
useEffect(() => {
Inputmask("email").mask(inputRef.current);
}, []);
return (
<input ref={inputRef} />
);
}
mounted() {
Inputmask("email").mask(this.$refs.email);
}
<input ref="email">
import Inputmask from "inputmask";
ngAfterViewInit() {
Inputmask("email").mask(this.email.nativeElement);
}
Inputmask можно комбинировать со стандартной HTML-проверкой.
<input
id="email"
type="email"
required
>
Inputmask("email").mask("#email");
HTML5 выполняет финальную проверку при отправке формы.
Для мобильных устройств желательно указывать тип поля:
<input
type="email"
id="email"
>
Это даёт:
@;Браузер может вставлять email целиком, обходя часть логики маски.
Решение:
<input
id="email"
autocomplete="off"
>
При использовании состояния React маска может перезаписывать значение.
Неправильно:
<input value={email} onCha nge={...} />
Лучше:
<input defaultValue="" ref={inputRef} />
или использовать специализированные обёртки.
Стандартный alias email не поддерживает кириллические символы.
Некорректно:
тест@почта.рф
Для поддержки Unicode требуется собственный regex.
Inputmask({
regex: "[\\w.-]+@[\\w.-]+\\.[\\w]{2,}"
}).mask("#email");
Такой вариант частично поддерживает национальные домены.
Inputmask контролирует структуру ввода, но не гарантирует существование адреса.
Обычно дополнительно используются:
<form id="register-form">
<input
id="email"
type="email"
placeholder="Введите email"
>
<button type="submit">
Регистрация
</button>
</form>
Inputmask({
alias: "email",
clearIncomplete: true,
casing: "lower",
showMaskOnHover: false
}).mask("#email");
document
.getElementById("register-form")
.addEventListener("submit", function(event) {
const input =
document.getElementById("email");
const valid =
input.inputmask.isComplete();
if (!valid) {
event.preventDefault();
input.classList.add("error");
}
});
Слишком строгие ограничения могут мешать:
В сложных проектах часто используется комбинация: