Проверить правильность ввода email с JavaScript

· JavaScript и Снипеты · 2 мин чтения

В HTML есть свой собственный способ проверки правильного ввода почты с помощью type="email" для input’ов, но это не так эффективно, потому что исходный код можно изменить и voilà (вуаля) вам больше не нужно писать нужный формат, чтобы отправить форму. Лучше всего делать дополнительную проверку с JavaScript и подкрепить это проверкой на стороне сервера. 

Я нашел регулярное выражение и сделал из него функцию для проверки почты. Выглядит они следующим образом:

function validateEmail(email) {
    var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return re.test(email);
}

У нее есть один параметр и она возвращает булевой результат, то есть правильный формат почты или нет.

А вот пример регулярки, который проверяет еще и русские символы для почты, например если домен расположен в .рф зоне.

var re = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;

Если этот вариант подходит больше всего, то не забудьте заменить его в функции.

Всегда помните о том, что любой пользователь может отключить JavaScript и тогда ваша проверка не будет работать. Для этого я советую дополнительно проверять формы на стороне сервера, например с помощью PHP. Или просить пользователя включить JavaScript с помощью <noscript></noscript> тегов, которые показываются только тем, у кого он отключен.

Пример

Я подумал, что не нужно делать пример, чтобы понять как это все работает, но все таки решил его сделать и вы можете увидеть его ниже.

Я написал его с jQuery, чтобы новичкам было понятнее. Тем более тут самое важное — это лишь одну функция, которая не зависимо JavaScript библиотеки будет работать без проблем.

jQuery

function validateEmail(email) {
  var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
  return re.test(email);
}

function validate() {
  $("#result").text("");
  var email = $("#email").val();
  if (validateEmail(email)) {
    $("#result").text(email + " верный формат :)");
    $("#result").css("color", "green");
  } else {
    $("#result").text(email + " не верный формат :(");
    $("#result").css("color", "red");
  }
  return false;
}

$("#validate").bind("click", validate);

HTML

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<form>
  <p>Введите вашу почту:</p>
  <input id='email'>
  <button type='submit' id='validate'>Проверить!</button>
</form>

<h2 id='result'></h2>

Демо

Ниже я составил демо, чтобы вы визуально могли посмотреть как это все работает.

21516