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

277

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

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

31 ответ

571

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

function isEmail(email) {
  var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  return regex.test(email);
}
  • 0
    будет ли это работать, если я помещу это в мой скрипт JQuery?
  • 65
    Да, помните, jQuery по-прежнему является javascript :)
Показать ещё 7 комментариев
147

Функция 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);
  • 7
    Просто к вашему сведению это возвращает истину для пустого адреса электронной почты. например, emailReg.text("") true . Я бы просто использовал функцию вплоть до объявления переменной emailReg var: return ( $email.length > 0 && emailReg.test($email))
Показать ещё 4 комментария
37

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

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

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

  • 6
    Хорошо ... не нужно изобретать велосипед. Но почему я должен установить десятки килобайт Javascript для проверки поля. Это похоже на строительство автомобильного завода, если все, что вам нужно, это новое колесо :)
  • 3
    @kraftb Как указано в моем ответе, это обработка и отображение вокруг проверки, а не только проверка самого текста.
Показать ещё 3 комментария
29

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

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

Подробнее см. Документация по электронной почте.

  • 1
    Последний еще жив)
  • 5
    но принятый формат - x@x (это странно), он должен x@xx Как я могу это исправить?
Показать ещё 1 комментарий
13

  

<!-- 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

13

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

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

  • Проверка синтаксиса (согласно RFC 822)
  • Проверка IANA TLD
  • Предложения по правописанию для наиболее распространенных доменов и доменов электронной почты
  • Отклонить временные домены электронной почты электронной почты, такие как mailinator.com

Таким образом, помимо проверки, Verimail.js также дает вам предложения. Поэтому, если вы вводите электронное письмо с неправильным доменом или доменом, который очень похож на общий домен электронной почты (hotmail.com, gmail.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 являются кодами, указывающими ошибки.

  • 0
    .getVerimailStatus() не возвращает числовые коды состояния, только строковое значение success , error или, возможно, pending (не проверял последний).
12
<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>
11

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 в этом ответе этот ответ

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

Выполняет более тщательную проверку, например, она проверяет следующие точки в имени пользователя, например 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
    Ваша ссылка устарела, блог на блоге исчез.
  • 1
    Но последовательные точки фактически недействительны? Напротив, я думаю, что вы будете исключать действительные адреса электронной почты, делая это.
7

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

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

[email protected] [email protected] [email protected]

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

ПРИМЕР FIDDLE

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

  • 0
    Метод regexp обычно предотвращает явно глупые электронные письма, такие как @ bc (что в вашем связанном примере JSFiddle позволяет использовать последний Chrome), поэтому решение HTML5 явно неадекватно.
  • 0
    прохладно. Так как насчет того, чтобы просто использовать сопоставление с шаблоном, как HTML5? Почему бы вам не попробовать это в вашем Chromebook: jsfiddle.net/du676/8
6
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. */ }
5
function validateEmail(emailaddress){  
   var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;  
   if(!emailReg.test(emailaddress)) {  
        alert("Please enter valid email id");
   }       
}
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 будет:

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);
}

Надеюсь, что поможет

  • 0
    Это был лучший ответ для меня - он вернул true на [email protected] но хотел бы, чтобы он был ложным
4
<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" />
3

Для thoose, которые хотят использовать лучшее поддерживаемое решение, чем подрывные матчи RegEx Lightyear, я написал несколько строк кода. Thoose, которые хотят сохранить байты, придерживаются варианта 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();
}}}}}}}}}
2

Очень простое решение - использовать проверку html5:

<form>
  <input type="email" required pattern="[^@]+@[^@]+\.[a-zA-Z]{2,6}">

  <input type="submit">
</form>

http://jsfiddle.net/du676/56/

2

Проверка Javascript Email в 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 re.test(email);
    }

Что делает именно то, что он должен делать.

  • 0
    Кажется, не работает.
  • 0
    @nbrogi Что вы имеете в виду, что это не работает? Я только что проверил это снова, и это производит следующее js var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/; Что происходит с вашим кодом?
Показать ещё 5 комментариев
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();
        });
    }
});
  • 2
    Stack Overflow - это сайт на английском языке. Пожалуйста, не размещайте контент на других языках.
2

вы должны увидеть это: jquery.validate.js, добавить его в свой проект

используя его следующим образом:

<input id='email' name='email' class='required email'/>
2

используйте этот

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');
    }
}
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. [email protected]" );

Refernce: ВЕБ-САЙТ JQUERY UI

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

(incorrect code)

}

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

(right code)

}
  • 8
    Можете ли вы уточнить свой ответ ... например, вы должны упомянуть, что getVerimailStatus - это дополнительный плагин.
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

Это регулярное выражение предотвращает дублирование доменных имен, таких как [email protected], это позволит использовать только домен два раза, например [email protected]. Он также не позволяет statring от числа, такого как [email protected]

 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

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

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

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

1

Ошибка в JQuery Validation Plugin Only проверяет только @, чтобы изменить это.

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

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 );
}
0

Вы можете использовать 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/[email protected]/dist/jquery.validate.js"></script>
<script>
$("#commentForm").validate();
</script>
0

Я использую этот код из jqvalidate версии 1.11.0 и реализован в версии 1.16.0 как дополнительный метод. Он работает

            jQuery.validator.addMethod("strictemail", function(value, element) {
                    var valid = /^((([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.test(value);
                    return valid;
                }, "Escribe un correo v\u00e1lido"
            );

И и в правиле электронной почты

            'correo': {
                required: 'Por favor ingresa tu correo',
                email: 'Escribe un correo v\u00e1lido',
                strictemail:'Escribe un correo v\u00e1lido'
            }
0

если вы используете подтверждение 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
    }
  }
});

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

[email protected], [email protected] но не этот

abc@abc, [email protected], [email protected]

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

0

Используйте jquery.validate.js, у него есть Microsoft ajax CDN.

$('#form').validate({
    rules:{
        "name":{
            required:true,
            maxlength:40
        },

        "email":{
            required:true,
            email:true, //for validate email
            maxlength:100
        },

        "message":{
            required:true
        }
    }
});
0

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

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

Но если вы не хотите, чтобы конец домена (.com,.nu,.net и т.д.) содержал числа (это мой предпочтительный выбор), отредактированная версия была бы следующей:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню