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

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


Ответы:


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

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

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