2010-05-18 3 views
163

Я не слишком уверен, как это сделать. Мне нужно, чтобы проверить адреса электронной почты с использованием регулярных выражений с чем-то вроде этого:Проверка адресов электронной почты с помощью jQuery и регулярного выражения

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

Где валидацию идти и что выражение ?

+0

См также http://stackoverflow.com/a/15659649/292060 – goodeye

ответ

473

ОБНОВЛЕНИЕ


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 кроме "отсутствует" в е из MailAddress хорошо работает, знаю, что нет регулярного выражения на 100%, но может получиться «довольно». – RussP

+2

вы приветствуете брата! ;-) –

+1

не подтвердил это слишком глубоко, но это уже дало мне ложное положительное значение для [email protected] – gcb

28

Это мое решение:

function isValidEmailAddress(emailAddress) { 
    var pattern = new RegExp(/^[+a-zA-Z0-9._-][email protected][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: я обновил свое регулярное выражение для поддержки знака плюс. –

+1

Прохладный, спасибо :) –

+0

В большинстве случаев вы просто хотите подтвердить, что пользователь ввел электронное письмо в нужном формате. Чтобы определить опечатки типа «2» вместо «@». Поэтому мне нравится это лучше, чем оригинальный ответ, но ответ Асептика всеобъемлющий, и я тоже проголосовал за это. – darwindeeds

0

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

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

Почему?

  • проверка TLD 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 продолжает проверку на клавиатуре, что означает, что как только вы начнете вводить текст, вы получите сообщение об ошибке. Как правило, отличный плагин, но этот - прерыватель транзакций - я бы предпочел проверять только при запуске вручную, т. Е. Перед нажатием кнопки отправки или выходом из поля. –

8

Lolz это намного лучше

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

Я предпочитаю ваше решение для мобильных сайтов. Другой из них заставит мой смартфон расплавиться;) +1 – Hexodus

+0

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

+0

Он не подтвердит буквы и т. Д. !! –

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

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

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

На самом деле это было полезно. Название говорит JQuery, и это единственный ответ до сих пор, который имеет достойный пример jquery. –

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; 
     } 
    }; 
Смежные вопросы