Проверка электронной почты с использованием jQuery


356

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


Прежде чем пытаться «подтвердить» адрес электронной почты, вы должны прочитать это: hackernoon.com/…
Микко Ранталайнен

Ответы:


703

Вы можете использовать обычный старый JavaScript для этого:

function isEmail(email) {
  var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  return regex.test(email);
}

66
Да, помните, jQuery по-прежнему является javascript :)
Fabian

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

1
@Umingo email@127.0.0.1 по-прежнему является действительным адресом электронной почты, однако его можно было бы написать лучше. Ни одна часть домена не может начинаться с другого символа, кроме [a-z0-9] (без учета регистра). Кроме того, действительный адрес электронной почты (и домен) имеет некоторый предел длины, который также не проверяется.
Томис

10
Поскольку новые домены верхнего уровня становятся все более распространенными, этому регулярному выражению может потребоваться изменение .systems, .poker и т. Д., Теперь все они являются действительными TLD, но не пройдут проверку регулярных выражений
Liath

3
Согласно комментарию Тео к другому ответу, вы должны перейти var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;на var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,6})+$/;поддержку новых доменов верхнего уровня, таких как .museum и т. Д.
Ира Герман,

165

Функция jQuery для проверки электронной почты

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

 function validateEmail($email) {
  var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
  return emailReg.test( $email );
}

и теперь, чтобы использовать это

if( !validateEmail(emailaddress)) { /* do stuff here */ }

Ура!


16
Вы должны просто вернутьсяemailReg.test($email);
nffdiogosilva

7
Просто к вашему сведению это возвращает истину для пустого адреса электронной почты. например emailReg.text("") true. Я бы просто функция до объявления emailReg var, то это:return ( $email.length > 0 && emailReg.test($email))
Diziet

14
Регулярное выражение для проверки правильности адреса электронной почты устарело, так как теперь у нас есть расширения доменного имени с 6 символами, такими как .museum, поэтому вы хотели бы изменить var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;наvar emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,6})?$/;
Theo

3
верно, вы @ h.coates! Я пришел к этой теме, надеясь обнаружить, что jQuery действительно имеет встроенную проверку электронной почты. Двигайся, это не те дроиды, которых ты ищешь ...
iGanja

3
@ Тео очень важно, но фактическая длина TLD должна быть больше 6, теоретический верхний предел для расширения составляет 63 символа. в настоящее время самый длинный из них старше 20 см. data.iana.org/TLD/tlds-alpha-by-domain.txt
Jeroenv3

41

Я бы использовал плагин проверки jQuery по нескольким причинам.

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

Кроме того, еще одно огромное преимущество заключается в том, что он размещен на CDN, текущую версию на момент ответа можно найти здесь: http://www.asp.net/ajaxLibrary/CDNjQueryValidate16.ashx Это означает более быстрое время загрузки клиента.


6
Хорошо ... нет необходимости изобретать велосипед. Но почему я должен установить десятки килобайт Javascript для проверки поля. Это все равно, что строить автомобильный завод, если все, что вам нужно, это новое колесо :)
kraftb

3
@kraftb Как сказано в моем ответе, это обработка и отображение вокруг проверки, а не только проверка самого текста.
Ник Крейвер

5
Спасибо за это @NickCraver: Это действительно выглядит как «лучший метод» для решения проблемы проверки электронной почты. Это, безусловно, НЕ похоже на строительство фабрики (написание библиотек для выполнения всей работы), чтобы получить колесо. Это все равно, что следовать инструкциям с завода по установке колеса на современном автомобиле (поднять автомобиль вверх, поставить колесо - надеть накидные гайки) вместо того, чтобы пытаться выяснить, как установить колесо повозки на свой автомобиль. Этот плагин очень прост в использовании. Для проверки формы это буквально включение, несколько аннотаций и единственный вызов метода.
jfgrissom

3
Теперь вы заново изобретаете метафору «изобретать велосипед»!
Дом Виньярд

Для тех, кто застрял, работая над приложениями для веб-
форм.

38

Посмотрите на http: //bassistance.de/jquery-plugins/jquery-plugin-validation/ . Это хороший плагин jQuery, который позволяет построить мощную систему проверки форм. Есть некоторые образцы Полезные здесь . Итак, проверка поля электронной почты в форме будет выглядеть так:

$("#myform").validate({
  rules: {
    field: {
      required: true,
      email: true
    }
  }
});

Смотрите документацию по электронной почте для получения подробной информации и образцов.


1
Последний еще жив)
Андрей Баштанник

6
но принятый формат x@x(это странно), он должен x@x.xКак я могу это исправить?
Башир Аль-Момани

2
@ BasheerAL-MOMANI [ jqueryvalidation.org/jQuery.validator.methods/] $.validator.methods.email = function( value, element ) { return this.optional( element ) || //^.+@.+\..+$/.test( value ); }
Билл Гиллингем,

17
<script type="text/javascript">
    $(document).ready(function() {
      $('.form_error').hide();
      $('#submit').click(function(){
           var name = $('#name').val();
           var email = $('#email').val();
           var phone = $('#phone').val();
           var message = $('#message').val();
           if(name== ''){
              $('#name').next().show();
              return false;
            }
            if(email== ''){
               $('#email').next().show();
               return false;
            }
            if(IsEmail(email)==false){
                $('#invalid_email').show();
                return false;
            }

            if(phone== ''){
                $('#phone').next().show();
                return false;
            }
            if(message== ''){
                $('#message').next().show();
                return false;
            }
            //ajax call php page
            $.post("send.php", $("#contactform").serialize(),  function(response) {
            $('#contactform').fadeOut('slow',function(){
                $('#success').html(response);
                $('#success').fadeIn('slow');
               });
             });
             return false;
          });
      });
      function IsEmail(email) {
        var regex = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
        if(!regex.test(email)) {
           return false;
        }else{
           return true;
        }
      }
  </script>

<form action="" method="post" id="contactform">
                            <table class="contact-table">
                              <tr>
                                <td><label for="name">Name :</label></td>
                                <td class="name"> <input name="name" id="name" type="text" placeholder="Please enter your name" class="contact-input"><span class="form_error">Please enter your name</span></td>
                              </tr>
                              <tr>
                                <td><label for="email">Email :</label></td>
                                <td class="email"><input name="email" id="email" type="text" placeholder="Please enter your email" class="contact-input"><span class="form_error">Please enter your email</span>
                                  <span class="form_error" id="invalid_email">This email is not valid</span></td>
                              </tr>
                              <tr>
                                <td><label for="phone">Phone :</label></td>
                                <td class="phone"><input name="phone" id="phone" type="text" placeholder="Please enter your phone" class="contact-input"><span class="form_error">Please enter your phone</span></td>
                              </tr>
                              <tr>
                                <td><label for="message">Message :</label></td>
                                <td class="message"><textarea name="message" id="message" class="contact-input"></textarea><span class="form_error">Please enter your message</span></td>
                              </tr>
                              <tr>
                                <td></td>
                                <td>
                                  <input type="submit" class="contactform-buttons" id="submit"value="Send" />
                                  <input type="reset" class="contactform-buttons" id="" value="Clear" />
                                </td>
                              </tr>
                            </table>
     </form>
     <div id="success" style="color:red;"></div>

15

<!-- Dont forget to include the jQuery library here -->
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript">

$(document).ready(function() {

    $("#validate").keyup(function(){

        var email = $("#validate").val();

        if(email != 0)
        {
            if(isValidEmailAddress(email))
            {
                $("#validEmail").css({
                    "background-image": "url('validYes.png')"
                });
            } else {
                $("#validEmail").css({
                    "background-image": "url('validNo.png')"
                });
            }
        } else {
            $("#validEmail").css({
                "background-image": "none"
            });         
        }

    });

});

function isValidEmailAddress(emailAddress) {
    var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
    return pattern.test(emailAddress);
}

</script>

<style>
    #validEmail
    {
        margin-top: 4px;
        margin-left: 9px;
        position: absolute;
        width: 16px;
        height: 16px;
    }

    .text
    {
        font-family: Arial, Tahoma, Helvetica;
    }
</style>

    <title>Live Email Validation with jQuery Demo</title>
</head>
<body>
    <div class="text"><h1>Reynoldsftw.com - Live Email Validation</h1><h2>Type in an email address in the box below:</h2></div>
    <div><input type="text" id="validate" width="30"><span id="validEmail"></span></div>
    <div class="text"><P>More script and css style

: www.htmldrive.net


Источник: htmldrive.com


14

Я бы порекомендовал Verimail.js , он также имеет плагин JQuery .

Почему? Verimail поддерживает следующее:

  • Проверка синтаксиса (согласно RFC 822)
  • Подтверждение ДВУ IANA
  • Правописание для наиболее распространенных доменов верхнего уровня и доменов электронной почты
  • Запретить временные домены учетной записи электронной почты, такие как mailinator.com

Таким образом, помимо проверки, Verimail.js также дает вам предложения. Поэтому, если вы введете письмо с неправильным TLD или доменом, очень похожим на обычный домен электронной почты (hotmail.com, gmail.com и т. Д.), Оно может обнаружить это и предложить исправление.

Примеры:

  • test@gnail.con -> Вы имели в виду test @ gmail.com ?
  • test@hey.nwt -> Вы имели в виду test @ hey. сеть ?
  • test@hottmail.com -> Вы имели в виду test @ hotmail.com ?

И так далее..

Чтобы использовать его с jQuery, просто включите verimail.jquery.js на свой сайт и запустите следующую функцию:

$("input#email-address").verimail({
    messageElement: "p#status-message"
});

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

Если у вас есть форма и вы хотите ограничить ее, чтобы она не могла быть отправлена, если электронное письмо не является действительным, тогда вы можете проверить статус, используя функцию getVerimailStatus, как показано ниже:

if($("input#email-address").getVerimailStatus() < 0){
    // Invalid
}else{
    // Valid
}

Эта функция возвращает целочисленный код состояния в соответствии с объектом Comfirm.AlphaMail.Verimail.Status. Но общее правило состоит в том, что любые коды ниже 0 являются кодами, указывающими на ошибки.


.getVerimailStatus()не возвращает числовые коды состояния, только строковое значение success, errorили , возможно pending(не проверял последний).
Нико Найман,

14

function isValidEmailAddress(emailAddress) {
    var pattern = /^([a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+(\.[a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+)*|"((([ \t]*\r\n)?[ \t]+)?([\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]))*(([ \t]*\r\n)?[ \t]+)?")@(([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);
};

if( !isValidEmailAddress( emailaddress ) ) { /* do stuff here (email is invalid) */ }

это было предоставлено пользователем Luca Filosofi в этом ответе на этот ответ


Если вы используете это на странице Razor ASP.NET MVC, не забудьте экранировать @символ с другим @символом. Вот так @@, иначе вы получите ошибку сборки.
Росди Касим


10

Это выполняет более тщательную проверку, например, проверяет наличие последовательных точек в имени пользователя, таких как john..doe @ example.com

function isValidEmail(email)
{
    return /^[a-z0-9]+([-._][a-z0-9]+)*@([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,4}$/.test(email)
        && /^(?=.{1,64}@.{4,64}$)(?=.{6,100}$).*/.test(email);
}

См проверить адрес электронной почты с помощью регулярного выражения в JavaScript .


1
Но последовательные точки фактически недействительны? Напротив, я думаю, что вы будете исключать действительные адреса электронной почты, делая это.
icktoofay

9

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

проверка с помощью регулярного выражения

var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
return regex.test(email);

проверка с помощью реального API проверки электронной почты

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

var emailAddress = "foo@bar.com"
response = $.get("https://isitarealemail.com/api/email/validate?email=" +
    emailAddress,
    function responseHandler(data) {
        if (data.status === 'valid') {
            // the email is valid and the mail box is active
        } else {
            // the email is incorrect or unable to be tested.
        }
    })

Для получения дополнительной информации см. Https://isitarealemail.com или сообщение в блоге.


8

Если у вас есть базовая форма, просто введите тип адреса электронной почты: <input type="email" required>

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

some@email.com so@em.co my@fakemail.net

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

Пример скрипки

Это работает в FireFox и Chrome. Это может не работать в Internet Explorer ... Но Internet Explorer отстой. Итак, вот что ...


Метод regexp обычно предотвращает явно глупые электронные письма, такие как @ bc (который в вашем связанном примере JSFiddle позволяет использовать последний Chrome), поэтому решение HTML5 явно неадекватное решение.
SnowInferno

прохладно. Так как насчет того, чтобы просто использовать сопоставление с шаблоном, как HTML5? Почему бы вам не попробовать это в своем Chromebook: jsfiddle.net/du676/8
погода в Исааке

8

Проверка почты Javascript в MVC / ASP.NET

Проблема, с которой я столкнулся при использовании ответа Фабиана, заключается в его реализации в виде MVC из-за @символа Razor . Вы должны включить дополнительный@ символ, чтобы избежать его, например, так:@@

Избежать бритвы в MVC

function isEmail(email) {
  var regex = /^([a-zA-Z0-9_.+-])+\@@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  return regex.test(email);
}

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

РЕДАКТИРОВАТЬ

Вот ссылка от Microsoft, описывающая его использование.
Я только что протестировал приведенный выше код и получил следующее js:

function validateEmail(email) {
  var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/; 
  return regex.test(email);
}

Который делает именно то, что должен делать.


@nbrogi Что вы имеете в виду, что это не работает? Я только что проверил это снова, и это приводит к следующему JS var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/; Что происходит с вашим кодом?
Тревор Нестман

Извините, я не уверен в данный момент, я полностью изменил это.
nkkollaw

Пожалуйста, дайте мне знать, когда сможете. Если это плохая информация, то я ее уберу. Я стараюсь предоставлять полезную информацию, когда это возможно, и это помогло мне при написании регулярных выражений в представлении MVC.
Тревор Нестман

Снова, я хотел бы знать, почему это было понижено. Он делает именно то, что я хочу, чтобы производить @символ в регулярном выражении в .cshtml. Обычно он пытается обработать все после @символа как код бритвы, но двойное @@препятствует этому.
Тревор Нестман

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

7
function isValidEmail(emailText) {
    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(emailText);
};

Используйте как это:

if( !isValidEmail(myEmail) ) { /* do things if myEmail is valid. */ }

6
function validateEmail(emailaddress){  
   var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;  
   if(!emailReg.test(emailaddress)) {  
        alert("Please enter valid email id");
   }       
}

5
<script type = "text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type = "text/javascript">
    function ValidateEmail(email) {
        var expr = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
        return expr.test(email);
    };
    $("#btnValidate").live("click", function () {
        if (!ValidateEmail($("#txtEmail").val())) {
            alert("Invalid email address.");
        }
        else {
            alert("Valid email address.");
        }
    });
</script>
<input type = "text" id = "txtEmail" />
<input type = "button" id = "btnValidate" value = "Validate" />

4

Приземлился тут ..... попал сюда: https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address

... который предоставил следующее регулярное выражение:

/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/

... который я нашел благодаря заметке о плагине jQuery Validation: https://github.com/jzaefferer/jquery-validation/blob/master/README.md#reporting-an-issue

Таким образом, обновленная версия @Fabian «s ответ будет:

function IsEmail(email) {
  var regex = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
  return regex.test(email);
}

надеюсь, это поможет


Это был лучший ответ для меня - он вернул истину, john..doe@example.comно хотел бы, чтобы это было ложно
Адам Найтс

3

использовать этот

if ($this.hasClass('tb-email')) {
    var email = $this.val();
    var txt = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    if (!txt.test(email)) {
        e.preventDefault();
        $this.addClass('error');
    } else {
        $this.removeClass('error');
    }
}

3

Ошибка в плагине проверки Jquery Validation Только проверяется с помощью @, чтобы изменить это

изменить код на это

email: function( value, element ) {
    // From http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#e-mail-state-%28type=email%29
    // Retrieved 2014-01-14
    // If you have a problem with this implementation, report a bug against the above spec
    // Or use custom methods to implement your own email validation
    return this.optional( element ) || /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test( value );
}

3

Для тех, кто хочет использовать более удобное в обслуживании решение, чем разрушительные совпадения RegEx с длиной светового года, я написал несколько строк кода. Те, кто хочет сохранить байты, придерживаются варианта RegEx :)

Это ограничивает:

  • Нет @ в строке
  • Нет точки в строке
  • Более 2 точек после @
  • Плохие символы в имени пользователя (до @)
  • Более 2 @ в строке
  • Плохие символы в домене
  • Плохие символы в поддомене
  • Плохие символы в TLD
  • TLD - адреса

В любом случае, утечка все еще возможна, поэтому убедитесь, что вы сочетаете это с проверкой на стороне сервера + проверкой электронной почты.

Вот JSFiddle

 //validate email

var emailInput = $("#email").val(),
    emailParts = emailInput.split('@'),
    text = 'Enter a valid e-mail address!';

//at least one @, catches error
if (emailParts[1] == null || emailParts[1] == "" || emailParts[1] == undefined) { 

    yourErrorFunc(text);

} else {

    //split domain, subdomain and tld if existent
    var emailDomainParts = emailParts[1].split('.');

    //at least one . (dot), catches error
    if (emailDomainParts[1] == null || emailDomainParts[1] == "" || emailDomainParts[1] == undefined) { 

        yourErrorFunc(text); 

     } else {

        //more than 2 . (dots) in emailParts[1]
        if (!emailDomainParts[3] == null || !emailDomainParts[3] == "" || !emailDomainParts[3] == undefined) { 

            yourErrorFunc(text); 

        } else {

            //email user
            if (/[^a-z0-9!#$%&'*+-/=?^_`{|}~]/i.test(emailParts[0])) {

               yourErrorFunc(text);

            } else {

                //double @
                if (!emailParts[2] == null || !emailParts[2] == "" || !emailParts[2] == undefined) { 

                        yourErrorFunc(text); 

                } else {

                     //domain
                     if (/[^a-z0-9-]/i.test(emailDomainParts[0])) {

                         yourErrorFunc(text); 

                     } else {

                         //check for subdomain
                         if (emailDomainParts[2] == null || emailDomainParts[2] == "" || emailDomainParts[2] == undefined) { 

                             //TLD
                             if (/[^a-z]/i.test(emailDomainParts[1])) {

                                 yourErrorFunc(text);

                              } else {

                                 yourPassedFunc(); 

                              }

                        } else {

                             //subdomain
                             if (/[^a-z0-9-]/i.test(emailDomainParts[1])) {

                                 yourErrorFunc(text); 

                             } else {

                                  //TLD
                                  if (/[^a-z]/i.test(emailDomainParts[2])) {

                                      yourErrorFunc(text); 

                                  } else {

                                      yourPassedFunc();
}}}}}}}}}

3

Вы можете использовать jQuery Validation, и в одной строке HTML вы можете проверить электронную почту и сообщение проверки электронной почты:type="email" required data-msg-email="Enter a valid email account!"

Вы можете использовать параметр data-msg-email, чтобы разместить персонализированное сообщение или иначе не размещать этот параметр, и будет отображаться сообщение по умолчанию: «Пожалуйста, введите действительный адрес электронной почты».

Полный пример:

<form class="cmxform" id="commentForm" method="get" action="">
  <fieldset>
    <p>
      <label for="cemail">E-Mail (required)</label>
      <input id="cemail" type="email" name="email" required data-msg-email="Enter a valid email account!">
    </p>
    <p>
      <input class="submit" type="submit" value="Submit">
    </p>
  </fieldset>
</form>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery-validation@1.17.0/dist/jquery.validate.js"></script>
<script>
$("#commentForm").validate();
</script>

2
if($("input#email-address").getVerimailStatus() < 0) { 

(incorrect code)

}

if($("input#email-address").getVerimailStatus() == 'error') { 

(right code)

}

9
Можете ли вы уточнить свой ответ ... например, вы должны упомянуть, что getVerimailStatus является дополнительным плагином.
Дэйв Хоган,

2
checkRegexp( email, /^((([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, "eg. ui@jquery.com" );

Ссылка: JQUERY UI ВЕБ-САЙТ



2

Еще один простой и полный вариант:

<input type="text" id="Email"/>
<div id="ClasSpan"></div>   
<input id="ValidMail" type="submit"  value="Valid"/>  


function IsEmail(email) {
    var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    return regex.test(email);
}

$("#ValidMail").click(function () {
    $('span', '#ClasSpan').empty().remove();
    if (IsEmail($("#Email").val())) {
        //aqui mi sentencia        
    }
    else {
        $('#ClasSpan').append('<span>Please enter a valid email</span>');
        $('#Email').keypress(function () {
            $('span', '#itemspan').empty().remove();
        });
    }
});

3
Stack Overflow - это сайт на английском языке. Пожалуйста, не размещайте контент на других языках.
Андерс

2

Вы можете создать свою собственную функцию

function emailValidate(email){
    var check = "" + email;
    if((check.search('@')>=0)&&(check.search(/\./)>=0))
        if(check.search('@')<check.split('@')[1].search(/\./)+check.search('@')) return true;
        else return false;
    else return false;
}

alert(emailValidate('your.email@yahoo.com'));

1

Упрощенный, который я только что сделал, делает то, что мне нужно. Ограничено только буквенно-цифровыми, точка, подчеркивание и @.

<input onKeyUp="testEmailChars(this);"><span id="a"></span>
function testEmailChars(el){
    var email = $(el).val();
    if ( /^[a-zA-Z0-9_@.-]+$/.test(email)==true ){
        $("#a").html("valid");
    } else {
        $("#a").html("not valid");
    }
}

Сделано с помощью других


1

Это регулярное выражение предотвращает дублирование доменных имен, таких как abc@abc.com.com.com.com, и разрешает использовать домен только два раза, например abc@abc.co.in. Это также не позволяет делать запись с номера, такого как 123abc@abc.com

 regexp: /^([a-zA-Z])+([a-zA-Z0-9_.+-])+\@(([a-zA-Z])+\.+?(com|co|in|org|net|edu|info|gov|vekomy))\.?(com|co|in|org|net|edu|info|gov)?$/, 

Всего наилучшего !!!!!


1

Проверяйте электронную почту во время набора, с обработкой состояния кнопки.

$("#email").on("input", function(){
    var email = $("#email").val();
    var filter = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
    if (!filter.test(email)) {
      $(".invalid-email:empty").append("Invalid Email Address");
      $("#submit").attr("disabled", true);
    } else {
      $("#submit").attr("disabled", false);
      $(".invalid-email").empty();
    }
  });

1

если вы используете проверку JQuery

Я создал метод, emailCustomFormatкоторый использовал regexдля моего формата Custm вы можете изменить его в соответствии с вашими требованиями

jQuery.validator.addMethod("emailCustomFormat", function (value, element) {
        return this.optional(element) || /^([\w-\.]+@@([\w-]+\.)+[\w-]{2,4})?$/.test(value);
    }, abp.localization.localize("FormValidationMessageEmail"));// localized message based on current language

тогда вы можете использовать это так

$("#myform").validate({
  rules: {
    field: {
      required: true,
      emailCustomFormat : true
    }
  }
});

это регулярное выражение принять

abc@abc.abc, abc@abc.abcd Но это не

abc@abc , abc@abc.a ,abc@abc.abcde

надеюсь, это поможет вам

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.