Как проверить адрес электронной почты
Короткий ответ
Простой шаблон проверяет главное: что-то, затем @, затем домен с точкой, и никаких пробелов:
const isEmail = (value) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value.trim());
console.log(isEmail('anna@example.com'));
console.log(isEmail('anna@example'));
console.log(isEmail('anna example@mail.com'));Результат:
true
false
falseВ форме
Поле с type="email" браузер проверяет сам. checkValidity() возвращает результат в JavaScript:
<input id="email" type="email" required placeholder="you@example.com">
<button id="check">Check</button>
<p id="out"></p>
<script>
document.getElementById('check').addEventListener('click', () => {
const input = document.getElementById('email');
document.getElementById('out').textContent = input.checkValidity() ? 'OK' : input.validationMessage;
});
</script>Нормализация
Перед проверкой и сохранением уберите пробелы по краям и приведите адрес к нижнему регистру:
const email = ' Anna.Smith@Example.COM '.trim().toLowerCase();
console.log(email);Результат:
anna.smith@example.comЧастая ошибка
Не пытайтесь написать идеальное регулярное выражение: правильные адреса слишком разнообразны, а строгий шаблон отсекает настоящих пользователей. Единственная надёжная проверка — письмо с подтверждением. И проверяйте ещё раз на сервере: проверку в браузере легко обойти.
const tooStrict = (value) => /^[a-z]+@[a-z]+\.[a-z]{2,3}$/.test(value);
console.log(tooStrict('anna.smith@example.com'));
console.log(tooStrict('anna@example.travel'));Результат:
false
falseФункции из этого ответа
- RegExp.prototype.test — Проверяет, есть ли в строке совпадение с шаблоном.
- String.prototype.trim — Удаляет пробельные символы с начала и конца строки.