Как проверить адрес электронной почты в JavaScript

Как можно проверить адрес электронной почты в JavaScript?

3943
задан 13 revs, 10 users 33% 15 July 2019 в 20:27
поделиться

10 ответов

Используя регулярные выражения , вероятно, лучший способ. Вы видите, что набор тестов здесь (взятый от хром )

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(String(email).toLowerCase());
}

Вот является примером регулярного выражения, которое принимает unicode:

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

, Но имеют в виду, что не нужно полагаться только на проверку JavaScript. 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);
}

function validate() {
  var $result = $("#result");
  var email = $("#email").val();
  $result.text("");

  if (validateEmail(email)) {
    $result.text(email + " is valid :)");
    $result.css("color", "green");
  } else {
    $result.text(email + " is not valid :(");
    $result.css("color", "red");
  }
  return false;
}

$("#validate").on("click", validate);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<form>
  <p>Enter an email address:</p>
  <input id='email'>
  <button type='submit' id='validate'>Validate!</button>
</form>

<h2 id='result'></h2>
4484
ответ дан 22 revs, 20 users 39% 15 July 2019 в 20:27
поделиться
  • 1
    Оператор @treap удаляет , не встраивается , как замечено в неразрешенной callq инструкции. Как Вы получаете листинг кода? – user3125280 19 January 2014 в 13:10

Ничего себе, существует большая сложность здесь. Если бы все, что Вы хотите сделать, просто поймать самые очевидные синтаксические ошибки, я сделал бы что-то вроде этого:

^\S+@\S+$

Это обычно фиксирует самые очевидные ошибки, которые пользователь совершает и гарантирует, что форма является главным образом правильной, который является тем, о чем проверка JavaScript - все.

335
ответ дан 4 revs, 4 users 62% 15 July 2019 в 20:27
поделиться

JavaScript может соответствовать регулярному выражению:

emailAddress.match( / some_regex /);

Вот регулярное выражение RFC22 для электронных писем:

^((?>[a-zA-Z\d!#$%&'*+\-/=?^_`{|}~]+\x20*|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*
"\x20*)*(?<angle><))?((?!\.)(?>\.?[a-zA-Z\d!#$%&'*+\-/=?^_`{|}~]+)+|"((?=[\x01-\x
7f])[^"\\]|\\[\x01-\x7f])*")@(((?!-)[a-zA-Z\d\-]+(?<!-)\.)+[a-zA-Z]{2,}|\[(((?(?<
!\[)\.)(25[0-5]|2[0-4]\d|[01]?\d?\d)){4}|[a-zA-Z\d\-]*[a-zA-Z\d]:((?=[\x01-\x7f])
[^\\\[\]]|\\[\x01-\x7f])+)\])(?(angle)>)$
67
ответ дан Ben Scheirman 15 July 2019 в 20:27
поделиться

Это было украдено из http://codesnippets.joyent.com/posts/show/1917

email = $('email');
filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
if (filter.test(email.value)) {
  // Yay! valid
  return true;
}
else
  {return false;}
43
ответ дан 17 December 2019 в 16:00
поделиться

Трудно получить валидатор электронной почты на 100% правильно. Единственный реальный способ исправить это - отправить тестовое электронное письмо на аккаунт. Тем не менее, есть несколько основных проверок, которые могут помочь убедиться, что вы получаете что-то разумное.

Некоторые вещи, которые нужно улучшить:

Вместо нового RegExp , просто попробуйте написать regexp следующим образом:

if (reg.test(/@/))

Во-вторых, убедитесь, что точка стоит после знака @ , и убедитесь, что между @ s есть символы и периоды.

16
ответ дан 17 December 2019 в 16:00
поделиться

Есть кое-что, что вы должны понять, как только вы решите использовать регулярное выражение для проверки писем: Это вероятно, не очень хорошая идея . Как только вы с этим согласитесь, есть много реализаций, которые помогут вам на полпути, эта статья хорошо их подытоживает.

Короче говоря, единственный способ быть абсолютно уверенным в том, что В действительности пользователь ввел электронное письмо, чтобы отправить электронное письмо и посмотреть, что произойдет. Кроме того, это всего лишь догадки.

324
ответ дан 17 December 2019 в 16:00
поделиться

Я добавляю свой Regex - я решил для меня больше небольших проблем как символы с других языков или прописных букв

^[a-zA-Z0-9][a-zA-Z0-9-_\.]+@([a-zA-Z]|[a-zA-Z0-9]?[a-zA-Z0-9-]+[a-zA-Z0-9])\.[a-zA-Z0-9]{2,10}(?:\.[a-zA-Z]{2,10})?$
2
ответ дан 17 December 2019 в 16:00
поделиться

Используйте браузер/время выполнения, чтобы обработать парсинг входа путем предварительного ожидания протокола и передать его URL API, захвата любых ошибок и проверить получающееся username и hostname свойства результата. Это обработает в основном все преобразования и возможности ( punycode наборов символов, и т.д.). Это только устанавливает, что вход parsable, не, который допустим - который только возможен посредством проверки, если целевая машина получает сообщения для того псевдонима. Это обеспечивает завершение (imo разумный) предположение, хотя, и может быть расширен, чтобы быть более конкретным и реалистичным, если Вы удобны и поддерживающие его и также риск недопустимыми отклонениями. (Обратите внимание, что это не пытается обратиться к IPv4 или адресам IPv6, просто широкий диапазон стоящих с клиентом сценариев с помощью домена.)

function validEmail(email=''){
    var [110], url, isValid = false, emailPatternInput = /^[^@]{1,64}@[^@]{4,253}$/, emailPatternUrl = /^[^@]{1,64}@[a-z][a-z0-9\.-]{3,252}$/i;
    email = email.trim();
    try{
        url = new URL('http://'+email);
        [110] = `${url.username}@${url.hostname}`;
        isValid = emailPatternInput.test( email );
        if(!isValid) throw 'invalid email pattern on input:' + email;
        isValid = emailPatternUrl.test( [110] );
        if(!isValid) throw 'invalid email pattern on url:' + [110];
        console.log(`email looks legit "${email}" checking url-parts: "${[110] === email ? '-SAME-':[110]}"`);
    }catch(err){
        console.error(`probably not an email address: "${email}"`, err);
    };
    return isValid;
}

['user+this@はじめよう.みんな', 'stuff@things', 'user+that@host.com', 'Jean+François@anydomain.museum','هيا@יאללה', '试@例子.测试.مثال.آزمایشی', 'not@@really', 'no'].forEach(email=>console.log(validEmail(email), email));

Это является и самым простым и большая часть обычно разрешающего примера, который я могу придумать. Отредактируйте его в случаях, где это может быть сделано быть более точным, в то время как поддерживают его простоту и разумную обычно разрешающую законность.

Также см. документы URL MDN URL, окно. URL и Nodejs для URL API.

1
ответ дан 17 December 2019 в 16:00
поделиться

Можно попробовать RegExp

function isValidEmail( value ) {
	return /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,5}$/.test( value );
}

console.log( isValidEmail("mymail@mydomain.com") )
0
ответ дан 17 December 2019 в 16:00
поделиться

Следующее регулярное выражение:

/^([\w]+)(.[\w]+)*@([\w]+)(.[\w]{2,3}){1,2}$/;
-5
ответ дан 17 December 2019 в 16:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: