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


174

Я не надто впевнений, як це зробити. Мені потрібно перевірити адреси електронної пошти за допомогою регексу приблизно таким чином:

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)

Тоді мені потрібно запустити це у функції jQuery, як це:

$j("#fld_emailaddress").live('change',function() { 
var emailaddress = $j("#fld_emailaddress").val();

// validation here? 

if(emailaddress){}

// end validation

$j.ajax({  
        type: "POST",  
         url: "../ff-admin/ff-register/ff-user-check.php",  
        data: "fld_emailaddress="+ emailaddress,  
        success: function(msg)
        { 
            if(msg == 'OK') { 
            $j("#fld_username").attr('disabled',false); 
            $j("#fld_password").attr('disabled',false); 
            $j("#cmd_register_submit").attr('disabled',false); 
            $j("#fld_emailaddress").removeClass('object_error'); // if necessary
            $j("#fld_emailaddress").addClass("object_ok");
            $j('#email_ac').html('&nbsp;<img src="img/cool.png" align="absmiddle"> <font color="Green"> Your email <strong>'+ emailaddress+'</strong> is OK.</font>  ');
            } else {  
            $j("#fld_username").attr('disabled',true); 
            $j("#fld_password").attr('disabled',true); 
            $j("#cmd_register_submit").attr('disabled',true);  
            $j("#fld_emailaddress").removeClass('object_ok'); // if necessary
            $j("#fld_emailaddress").addClass("object_error");
            $j('#email_ac').html(msg);
            }
        }
     });
});

Куди йде перевірка та що виражається?


Дивіться також stackoverflow.com/a/15659649/292060
goodeye

Відповіді:


491

ОНОВЛЕННЯ


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 */ }

2
спасибі aSeptik крім того, що "пропав" електронна пошта з електронної пошти, добре працює, так що знайте, що не існує 100-відсоткової
виразки

1
не підтвердив це занадто глибоко, але це вже дало мені помилковий позитив для asdf@adsf.com
gcb

@gcb: привіт, якщо регулярний вираз не задовольнив ваші потреби, ви можете змінити його, все одно я перевірив його, і він працює добре. jsfiddle.net/ADPaM
Лука Filosofi

14
регулярний вираз лише на стороні клієнта, не знає, чи є сервер пошти, а також чи існує сам домен. він перевіряє, чи синтаксис будь-якого електронного листа є дійсним чи ні. Це лише допомогти користувачеві написати правильну адресу. це не підтвердження.
BerggreenDK

Працює ідеально! Спасибі товариш

28

Це моє рішення:

function isValidEmailAddress(emailAddress) {
    var pattern = new RegExp(/^[+a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i);
    // alert( pattern.test(emailAddress) );
    return pattern.test(emailAddress);
};

Виявив, що RegExp тут: http://mdskinner.com/code/email-regex-and-validation-jquery


3
Ваша думка щодо знаку плюс справедлива, але ваш регекс менш кращий, ніж той, який я використовую у своєму прикладі. ps: я оновив свій регулярний вираз на підтримку плюс знак.
Лука Філософі

У більшості випадків ви просто хочете перевірити, що користувач ввів електронну пошту у потрібному форматі. Визначити помилки типу "2" замість "@". Тож мені подобається це краще, ніж оригінальна відповідь, але відповідь Septik є вичерпною, і я це також проголосував.
darwindeeds

test @ gmail..com це скажеш вал - WRONG, зміни регулярного вираження
htngapi

14
$(document).ready(function() {

$('#emailid').focusout(function(){

                $('#emailid').filter(function(){
                   var emil=$('#emailid').val();
              var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
            if( !emailReg.test( emil ) ) {
                alert('Please enter valid email');
                } else {
                alert('Thank you for your valid email');
                }
                })
            });
});

8
насправді це було корисно. Заголовок говорить про JQuery, і це єдина відповідь на даний момент, яка має гідний приклад jquery.
Тейлор Мітчелл

це підтверджує abc.b. @ yahoo.com
NoBullMan

7

Лольц це набагато краще

    function isValidEmailAddress(emailAddress) {
        var pattern = new RegExp(/^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/);
        return pattern.test(emailAddress);
    };

Я віддаю перевагу вашому рішенню для мобільних веб-сайтів. Інший привів би мій смартфон до танення;) +1
Гексод

синтаксична проблема oin javascript
Sajith

Він не підтверджує äüõ тощо букв !!
DAH

5

Я рекомендую вам використовувати плагін jQuery для Verimail.js .

Чому?

  • Валідація IANA TLD
  • Перевірка синтаксису (згідно RFC 822)
  • Правопис пропозиції для найбільш поширених доменів TLD та електронної пошти
  • Заборонити тимчасові домени облікових записів електронної пошти, такі як mailinator.com

Як?

Включіть verimail.jquery.js на свій сайт і скористайтеся функцією:

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

Якщо у вас є форма і хочете перевірити електронний лист при надсиланні, ви можете скористатися функцією getVerimailStatus:

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

1
Verimail продовжує перевіряти при натисканні клавіш, а значить, як тільки ви почнете набирати текст, ви отримаєте повідомлення про помилку. Взагалі чудовий плагін, але цей варіант є розірвачем угод - я вважаю за краще перевіряти його лише тоді, коли спрацьовує вручну, тобто перед натисканням кнопки подання або виходу з поля.
Себастьян Шмід


0

Ми також можемо використовувати регулярне вираження (/^( evidence\w.-Sense+)@( evidence\w-Sense+)((.(\w){2,3})+)$/i) для підтвердження адреси електронної пошти формат правильний чи ні.

var emailRegex = new RegExp(/^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$/i);
 var valid = emailRegex.test(emailAddress);
  if (!valid) {
    alert("Invalid e-mail address");
    return false;
  } else
    return true;

0

Спробуйте це

function isValidEmailAddress(emailAddress) {
    var pattern = new RegExp(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/);
    return pattern.test(emailAddress);
};

0

ви можете використовувати цю функцію

 var validateEmail = function (email) {

        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;


        if (pattern.test(email)) {
            return true;
        }
        else {
            return false;
        }
    };

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.