Как выполнить проверку адреса электронной почты с помощью Javascript (без JQuery)?

Я пытаюсь выполнить проверку адреса электронной почты для текстового поля ввода, однако он должен только отправить, если запись не является нулевой и имеет в ней символ @

Пример 1 - это тот, который работает, однако он исключает необходимость в @ char

function emailvalidation() {
var x=document.forms["input"]["email"].value;

if (x==null || x=="") {
    alert("Input email address, please!");
return false
}

Пример 2, который не работает, но как я себе представляю, он будет написан

    function emailvalidation() {
var x=document.forms["input"]["email"].value;
var email = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;

if (x<>null || x<>"" && x.value.match(email)) {
    alert("Input email address, please!");
return true
} else {
    alert("Input email address, please!");
return false
}
}

У кого-нибудь есть идеи? Спасибо, хотя, желательно без JQuery! Благодаря!

0
Что означает «не работает»? Вы получаете ложные срабатывания?
добавлено автор Cristik, источник
Если вам нужен знак @ , почему бы не использовать x.indexOf ('@')! = -1 ? Вторая функция должна иметь x.match (email) вместо x.value.match (email) , поскольку x уже является значение .
добавлено автор putvande, источник
Если вам нужен знак @ , почему бы не использовать x.indexOf ('@')! = -1 ? Вторая функция должна иметь x.match (email) вместо x.value.match (email) , поскольку x уже является значение .
добавлено автор putvande, источник
Если вам нужен знак @ , почему бы не использовать x.indexOf ('@')! = -1 ? Вторая функция должна иметь x.match (email) вместо x.value.match (email) , поскольку x уже является значение .
добавлено автор putvande, источник
Когда вы говорите, что это не работает, есть ли у вас примеры, которые не соответствуют второму примеру? Вы пробовали заменить <> на ! == ? Работает в этой скрипке . Вы захотите изменить || к && тоже. Мне пришлось удалить .value из x.value.match() , поскольку я использую строку вместо элемента.
добавлено автор adamdc78, источник
Когда вы говорите, что это не работает, есть ли у вас примеры, которые не соответствуют второму примеру? Вы пробовали заменить <> на ! == ? Работает в этой скрипке . Вы захотите изменить || к && тоже. Мне пришлось удалить .value из x.value.match() , поскольку я использую строку вместо элемента.
добавлено автор adamdc78, источник
Когда вы говорите, что это не работает, есть ли у вас примеры, которые не соответствуют второму примеру? Вы пробовали заменить <> на ! == ? Работает в этой скрипке . Вы захотите изменить || к && тоже. Мне пришлось удалить .value из x.value.match() , поскольку я использую строку вместо элемента.
добавлено автор adamdc78, источник
вы можете проверить правильное использование регулярных сообщений электронной почты. вы можете ссылаться на этот [post] [1] [1]: stackoverflow.com/questions/46155/…
добавлено автор Ari Djemana, источник
вы можете проверить правильное использование регулярных сообщений электронной почты. вы можете ссылаться на этот [post] [1] [1]: stackoverflow.com/questions/46155/…
добавлено автор Ari Djemana, источник

12 ответы

Другая проверка электронной почты.

function isValidEmailAddress(emailAddress) {
            var pattern = new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i);
            return pattern.test(emailAddress);
        };
1
добавлено

Другая проверка электронной почты.

function isValidEmailAddress(emailAddress) {
            var pattern = new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i);
            return pattern.test(emailAddress);
        };
1
добавлено

Другая проверка электронной почты.

function isValidEmailAddress(emailAddress) {
            var pattern = new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i);
            return pattern.test(emailAddress);
        };
1
добавлено

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

Обратите внимание, что текстовое поле ввода возвращает строки. Адреса электронной почты должны иметь что-то перед @ , поэтому мы проверяем, появляется ли после первого символа @ (с помощью indexOf нам не требуется регулярное выражение). Кроме того, если мы нашли @ , это означает, что строка не была пустой!
Если @ находится в том же положении, что и последний @ , и эта позиция меньше, чем общая длина строки, это дает нам true или false , которое мы можем мгновенно return .
Если ни одно из трех условий не выполнено, мы alert отправим наше сообщение об ошибке. alert возвращает undefined (который сам по себе принуждает к false в javascript, но), который мы принудительно добавляем к логическому false используя double not !! и return это значение.

Второй пример следует той же логике, но использует регулярное выражение.

<div class="snippet" data-lang="js" data-hide="false" data-console="false" data-babel="false"> <div class="snippet-code">

function emailvalidation(){ //without regex
  var s=document.forms.input.email.value
  ,   x=s.indexOf('@');
  return( x>0 && x===(x=s.lastIndexOf('@')) && x
<form name="input">
  <input name="email" type="text" />
</form>
<button onclick="alert(emailvalidation())">test</button>
</div> </div>

Заключительное примечание: хорошо, что вы свободны в принятии адресов электронной почты , так как попытка выполнить хорошую работу в регулярном выражении длинная и трудная, см., Например, это регулярное выражение: http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html
Нет просто надежного способа подтверждения действительного адреса электронной почты, кроме отправки электронной почты пользователю и ожидании ответа. См. Также https://softwareengineering.stackexchange.com/ вопросы/78353 /, как-далеко должен-один-бери электронной почты адрес проверка
Если вы do попытаетесь использовать действительные адреса электронной почты regex, тогда сообщите работодателю, что вы будут стоить ему бизнес/клиенты/наличные !!!

0
добавлено

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

Обратите внимание, что текстовое поле ввода возвращает строки. Адреса электронной почты должны иметь что-то перед @ , поэтому мы проверяем, появляется ли после первого символа @ (с помощью indexOf нам не требуется регулярное выражение). Кроме того, если мы нашли @ , это означает, что строка не была пустой!
Если @ находится в том же положении, что и последний @ , и эта позиция меньше, чем общая длина строки, это дает нам true или false , которое мы можем мгновенно return .
Если ни одно из трех условий не выполнено, мы alert отправим наше сообщение об ошибке. alert возвращает undefined (который сам по себе принуждает к false в javascript, но), который мы принудительно добавляем к логическому false используя double not !! и return это значение.

Второй пример следует той же логике, но использует регулярное выражение.

<div class="snippet" data-lang="js" data-hide="false" data-console="false" data-babel="false"> <div class="snippet-code">

function emailvalidation(){ //without regex
  var s=document.forms.input.email.value
  ,   x=s.indexOf('@');
  return( x>0 && x===(x=s.lastIndexOf('@')) && x
<form name="input">
  <input name="email" type="text" />
</form>
<button onclick="alert(emailvalidation())">test</button>
</div> </div>

Заключительное примечание: хорошо, что вы свободны в принятии адресов электронной почты , так как попытка выполнить хорошую работу в регулярном выражении длинная и трудная, см., Например, это регулярное выражение: http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html
Нет просто надежного способа подтверждения действительного адреса электронной почты, кроме отправки электронной почты пользователю и ожидании ответа. См. Также https://softwareengineering.stackexchange.com/ вопросы/78353 /, как-далеко должен-один-бери электронной почты адрес проверка
Если вы do попытаетесь использовать действительные адреса электронной почты regex, тогда сообщите работодателю, что вы будут стоить ему бизнес/клиенты/наличные !!!

0
добавлено

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

Обратите внимание, что текстовое поле ввода возвращает строки. Адреса электронной почты должны иметь что-то перед @ , поэтому мы проверяем, появляется ли после первого символа @ (с помощью indexOf нам не требуется регулярное выражение). Кроме того, если мы нашли @ , это означает, что строка не была пустой!
Если @ находится в том же положении, что и последний @ , и эта позиция меньше, чем общая длина строки, это дает нам true или false , которое мы можем мгновенно return .
Если ни одно из трех условий не выполнено, мы alert отправим наше сообщение об ошибке. alert возвращает undefined (который сам по себе принуждает к false в javascript, но), который мы принудительно добавляем к логическому false используя double not !! и return это значение.

Второй пример следует той же логике, но использует регулярное выражение.

<div class="snippet" data-lang="js" data-hide="false" data-console="false" data-babel="false"> <div class="snippet-code">

function emailvalidation(){ //without regex
  var s=document.forms.input.email.value
  ,   x=s.indexOf('@');
  return( x>0 && x===(x=s.lastIndexOf('@')) && x
<form name="input">
  <input name="email" type="text" />
</form>
<button onclick="alert(emailvalidation())">test</button>
</div> </div>

Заключительное примечание: хорошо, что вы свободны в принятии адресов электронной почты , так как попытка выполнить хорошую работу в регулярном выражении длинная и трудная, см., Например, это регулярное выражение: http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html
Нет просто надежного способа подтверждения действительного адреса электронной почты, кроме отправки электронной почты пользователю и ожидании ответа. См. Также https://softwareengineering.stackexchange.com/ вопросы/78353 /, как-далеко должен-один-бери электронной почты адрес проверка
Если вы do попытаетесь использовать действительные адреса электронной почты regex, тогда сообщите работодателю, что вы будут стоить ему бизнес/клиенты/наличные !!!

0
добавлено

You have a couple of logical problems in your solution.
Firstly, the condition is that x is not null and x is not an empty string and x matches the pattern.
Secondly, <> is the wrong comparator for javascript; use != or !==.
Thirdly, as pointed out by putvande x is already the element's value, so x.value.match() is probably causing you issues.

function emailvalidation() {
  var x = document.forms["input"]["email"].value;
  var email = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;

  if (x !== null && x !== "" && x.match(email)) {
    return true;
  } else {
    alert("Input email address, please!");
    return false;
  }
}
0
добавлено
Я просто написал свой собственный комментарий, поскольку получил этот, спасибо вам большое за это, вы меня многому научили! :)
добавлено автор WorkingScript, источник

You have a couple of logical problems in your solution.
Firstly, the condition is that x is not null and x is not an empty string and x matches the pattern.
Secondly, <> is the wrong comparator for javascript; use != or !==.
Thirdly, as pointed out by putvande x is already the element's value, so x.value.match() is probably causing you issues.

function emailvalidation() {
  var x = document.forms["input"]["email"].value;
  var email = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;

  if (x !== null && x !== "" && x.match(email)) {
    return true;
  } else {
    alert("Input email address, please!");
    return false;
  }
}
0
добавлено
Я просто написал свой собственный комментарий, поскольку получил этот, спасибо вам большое за это, вы меня многому научили! :)
добавлено автор WorkingScript, источник

You have a couple of logical problems in your solution.
Firstly, the condition is that x is not null and x is not an empty string and x matches the pattern.
Secondly, <> is the wrong comparator for javascript; use != or !==.
Thirdly, as pointed out by putvande x is already the element's value, so x.value.match() is probably causing you issues.

function emailvalidation() {
  var x = document.forms["input"]["email"].value;
  var email = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;

  if (x !== null && x !== "" && x.match(email)) {
    return true;
  } else {
    alert("Input email address, please!");
    return false;
  }
}
0
добавлено
Я просто написал свой собственный комментарий, поскольку получил этот, спасибо вам большое за это, вы меня многому научили! :)
добавлено автор WorkingScript, источник

Спасибо вам всем за это! Решение было смесью всех ответов! Хотя, вот окончательное решение! Нужно новое выражение reg и! ==

Спасибо всем, хотя, от новичка JS, он действительно оценен

function emailvalidation() {

var x=document.forms["input"]["email"].value;
var email = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;

if (x !== null && x !== "" && x.match(email)) {
return true
} else {
    alert("Input email address, please!");
return false
}
}
0
добавлено

Спасибо вам всем за это! Решение было смесью всех ответов! Хотя, вот окончательное решение! Нужно новое выражение reg и! ==

Спасибо всем, хотя, от новичка JS, он действительно оценен

function emailvalidation() {

var x=document.forms["input"]["email"].value;
var email = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;

if (x !== null && x !== "" && x.match(email)) {
return true
} else {
    alert("Input email address, please!");
return false
}
}
0
добавлено

Спасибо вам всем за это! Решение было смесью всех ответов! Хотя, вот окончательное решение! Нужно новое выражение reg и! ==

Спасибо всем, хотя, от новичка JS, он действительно оценен

function emailvalidation() {

var x=document.forms["input"]["email"].value;
var email = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;

if (x !== null && x !== "" && x.match(email)) {
return true
} else {
    alert("Input email address, please!");
return false
}
}
0
добавлено
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

All That JS
All That JS
417 участник(ов)

JS на русском