Перевірка електронної пошти за допомогою jQuery


Відповіді:


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] (нечутливий до регістру). Крім того, дійсна електронна пошта (та домен) має деякий ліміт позову, який також не перевіряється.
tomis

10
З появою нових доменів верхнього рівня стає все більш поширеним це регулярний вираз , можливо , буде потрібно зміна .systems і .poker і т.д., все дійсні ДВУ зараз , але зазнає невдачі регулярний вираз перевірки
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})+$/;підтримати новіший TLD, як. Музей та ін.
Іра Герман

164

Функція 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
Просто FYI це повертає справжнє значення для порожньої адреси електронної пошти. напр emailReg.text("") true. Я б просто перейшов до декларації varReg, а потім:return ( $email.length > 0 && emailReg.test($email))
Diziet

14
Регулярний вираз для перевірки EMAILADDRESS дійсності застаріло , так як ми тепер маємо Domainname розширення з 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
Гаразд ... не потрібно винаходити колесо. Але чому я повинен встановити десятки KByte Javascript для перевірки поля. Це як побудувати автозавод, якщо все, що тобі потрібно, - це нове колесо :)
kraftb

3
@kraftb Як зазначено у моїй відповіді, це обробка та відображення навколо перевірки, а не просто перевірки самого тексту.
Нік Крейвер

5
Дякуємо за це @NickCraver: Це дійсно виглядає як "найкраща практика" підходу до проблеми обробки перевірки електронної пошти. Це, звичайно, НЕ, як будівництво фабрики (написання ліфтів, щоб виконати всю роботу), щоб отримати колесо. Це як дотримуватися вказівок заводу встановити колесо на сучасний транспортний засіб (підключіть машину, покладіть колесо - надіньте гайки на кнопок), а не намагатися розібратися, як доїхати до вагона колеса. Цей плагін дуже простий у використанні. Для перевірки форми це буквально включають, деякі примітки та виклик одного методу.
jfgrissom

3
Тепер ви винаходите метафору "винаходити колесо"!
Dom Vinyard

Для людей, які застрягли, працюючи над додатками веб-
Джеррек,

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Як я можу це виправити?
Basheer AL-MOMANI

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 TLD
  • Правопис пропозиції для найбільш поширених доменів TLD та електронної пошти
  • Заборонити тимчасові домени облікових записів електронної пошти, такі як mailinator.com

Тож крім перевірки, Verimail.js також дає вам пропозиції. Тож якщо ви введете електронний лист із неправильним TLD або доменом, який дуже схожий на звичайний домен електронної пошти (hotmail.com, gmail.com тощо), він може виявити це і запропонувати виправити.

Приклади:

  • test@gnail.con -> Ви мали на увазі тест @ gmail.com ?
  • test@hey.nwt -> Ви мали на увазі тест @ hey. сітка ?
  • test@hottmail.com -> Ви мали на увазі тест @ 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) */ }

це надав користувач Лука Філософі у цій відповіді на цю відповідь


Якщо ви використовуєте це на сторінці ASP.NET MVC Razor, не забудьте уникнути @символу з іншим @символом. Так @@, інакше ви отримаєте помилку побудови.
Росді Касім


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? Чому б ви не спробували цього у своєму хронікбуді
погода isaac

8

Перевірка електронної пошти Javascript у MVC / ASP.NET

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

Щоб уникнути бритви в MVC

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

Я не бачив його в іншому місці на цій сторінці, тому подумав, що це може бути корисним.

EDIT

Ось посилання від 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. Зазвичай це намагається ставитись до всього після @символу як до коду бритви, але подвійний @@перешкоджає цьому.
Тревор Нестман

Основна проблема, яку я бачу, є у другому кодовому блоці, ваш регекс встановлений на змінну з назвою regex, але другий рядок використовує змінну з назвою re
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])?)*$/

... яку я знайшов завдяки примітці до readme плагіна 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. Підтверджується лише з допомогою @, щоб змінити це

змінити код на це

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

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

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

ви повинні побачити це: jquery.validate.js , додайте його до свого проекту

використовуючи його так:

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

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
Переповнення стека - це сайт англійською мовою. Будь ласка, не публікуйте вміст іншими мовами.
Андерс

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

Цей regexp запобігає дублюванню доменних імен, таких як 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для мого формату curm, ви можете змінити його, щоб відповідати вашим вимогам

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.