Проверка адресов электронной почты с использованием 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);
            }
        }
     });
});

Куда идет проверка и каково выражение?

RussP
источник
См. Также 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%, но они могут быть "довольно" близкими
RussP
1
я не проверял это слишком глубоко, но это уже дало мне ложный позитив для asdf@adsf.com
gcb
@ gcb: привет, если регулярное выражение не удовлетворяет вашим потребностям, вы можете изменить его, в любом случае, я проверил его, и он работает нормально. jsfiddle.net/ADPaM
Лука Философи
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» вместо «@». Так что мне нравится это лучше, чем оригинальный ответ, но ответ aSeptik является исчерпывающим, и я также проголосовал за это.
darwindeeds
test @ gmail..com это говорит vaild - НЕПРАВИЛЬНО, изменить регулярное выражение
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');
                }
                })
            });
});
webizon
источник
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
Hexodus
Синтаксическая проблема
oin
Он не подтвердит правильность написания писем и т. Д. !!
DAH
5

Я бы порекомендовал вам использовать плагин jQuery для Verimail.js .

Зачем?

  • Подтверждение ДВУ IANA
  • Проверка синтаксиса (согласно RFC 822)
  • Правописание для наиболее распространенных доменов верхнего уровня и доменов электронной почты
  • Запретить временные домены учетной записи электронной почты, такие как 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 продолжает проверять на keyup, что означает, что, как только вы начнете печатать, вы получите сообщение об ошибке. В общем, отличный плагин, но этот - прерыватель сделки - я бы предпочел проверять его только при запуске вручную, т.е. перед нажатием кнопки «Отправить» или покиданием поля.
Себастьян Шмид
0

Мы также можем использовать регулярное выражение (/^([\w.-]+)@([\w-]+)((.(\w) average2,3 enj)+)$/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;
        }
    };
Nikki
источник