Бывает необходимость проверить email на валидность. Я видел всякое: простую проверку на наличие
@ в строке, самописные и взятые со StackOverflow регулярные выражения и даже специализированные библиотеки. Есть более простой способ:function isEmailValid(email) {
const input = document.createElement('input');
input.type = 'email';
input.value = email;
return input.checkValidity();
}
console.log(isEmailValid('foo@bar.baz'));
// true
console.log(isEmailValid('invalid'));
// falseВо всех браузерах есть
<input type="email">. У него под капотом встроена валидация. Зная этот факт, можно создать <input>, установить значение и вызвать метод checkValidity(). Он вернёт true, если email валидный и false в противном случае. При этом не обязательно добавлять поле на страницу.В спецификации HTML описано, как происходит валидация email-адресов. Там учитываются международные стандарты RFC 5322 и RFC 1034. Ещё одна особенность встроенной валидации в том, что можно проверять одновременно несколько email. Строка будет считаться валидной, если все email, разделённые запятой, будут валидны. Для этого у
<input> должен быть установлен атрибут или свойство multiple. function isEmailValid(email) {
const input = document.createElement('input');
input.type = 'email';
input.multiple = true;
input.value = email;
return input.checkValidity();
}
console.log(isEmailValid('foo@bar.baz'));
// true
console.log(isEmailValid('foo@bar.baz,baz@foo.bar'));
// true
console.log(isEmailValid('foo@bar.baz,invalid'));
// falseМожно доработать функцию, чтобы она работала с массивом email-адресов вместо строки, обрезала лишние пробелы и склеивала всё в строку с запятыми.
#js