Можно так:
import React from 'react';
import IMask from 'imask';
class EmailInput extends React.Component {
componentDidMount() {
this.mask = IMask(this.inputElement, {
mask: /^[a-zA-Z0-9._-]*$/,
prepare: function (str) {
return str.toLowerCase();
},
commit: function (value, masked) {
masked._value = value.toLowerCase();
}
});
}
componentWillUnmount() {
this.mask.destroy();
}
render() {
return (
<input
ref={el => this.inputElement = el}
placeholder="Enter your email"
/>
);
}
}
export default EmailInput;
В этом коде:
- Маска mask: /^[a-zA-Z0-9._-]*$/ разрешает ввод только латинских букв, цифр, точек, тире и нижнего подчеркивания.
- Функции prepare и commit используются для приведения введенного текста к нижнему регистру. Это необязательно, если вам не требуется такое поведение.
===================================================================
Есть еще вот такой вариант:
import React, { useState, useRef, useEffect } from 'react';
import IMask from 'imask';
function EmailInput() {
const [email, setEmail] = useState('');
const inputRef = useRef(null);
useEffect(() => {
if (inputRef.current) {
const maskOptions = {
mask: /^[a-zA-Z0-9._@-]*$/, // Допускает латинские буквы, цифры, точки, подчеркивания, @ и дефисы
prepare: (str) => str.toLowerCase(),
commit: (value, masked) => {
setEmail(masked._value); // Обновление состояния React на основе значения маски
}
};
const mask = IMask(inputRef.current, maskOptions);
return () => {
mask.destroy();
};
}
}, []);
// Функция onChange обновляет значение в IMask и состояние React
const handleChange = (event) => {
const maskInstance = IMask(inputRef.current).updateValue();
setEmail(maskInstance.value);
};
return (
<input
ref={inputRef}
type="email"
value={email}
onChange={handleChange}
placeholder="Enter your email"
/>
);
}
export default EmailInput;
В этом коде:
- useRef используется для получения ссылки на DOM-элемент input.
- useState отвечает за хранение текущего значения email.
- useEffect настраивает IMask при первом рендеринге компонента. Мы определяем параметры маски, где mask регулярное выражение позволяет ввод только определённых символов. Функции prepare и commit используются для трансформации и сохранения значений.
- handleChange вызывается при каждом изменении поля ввода, обновляет состояние маски и состояние React компонента.