Можно так: <br/> <pre><code class="javascript">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;</code></pre> <br/> <br/> В этом коде: <br/> - Маска mask: /^[a-zA-Z0-9._-]*$/ разрешает ввод только латинских букв, цифр, точек, тире и нижнего подчеркивания. <br/> - Функции prepare и commit используются для приведения введенного текста к нижнему регистру. Это необязательно, если вам не требуется такое поведение. <br/> <br/> =================================================================== <br/> <br/> Есть еще вот такой вариант: <br/> <br/> <pre><code class="javascript">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;</code></pre> <br/> <br/> В этом коде: <br/> - useRef используется для получения ссылки на DOM-элемент input. <br/> - useState отвечает за хранение текущего значения email. <br/> - useEffect настраивает IMask при первом рендеринге компонента. Мы определяем параметры маски, где mask регулярное выражение позволяет ввод только определённых символов. Функции prepare и commit используются для трансформации и сохранения значений. <br/> - handleChange вызывается при каждом изменении поля ввода, обновляет состояние маски и состояние React компонента.