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