2010-05-18 33 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 2013-12-27 22:53:38

回答

473

UPDATES
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 2010-05-19 07:46:36

+2

歡迎兄弟! ;-) – 2010-05-19 08:33:19

+1

沒有驗證太深,但它已經給我[email protected] – gcb 2011-04-13 07:30:24

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

研究發現,正則表達式在這裏: http://mdskinner.com/code/email-regex-and-validation-jquery

+3

你對加號的看法是有效的,但你的正則表達式不如我在我的例子中使用的正則表達式更好。 ps:我已經更新了我的正則表達式來支持加號。 – 2011-10-21 21:18:11

+1

很酷,謝謝:) – 2012-01-14 17:30:05

+0

大多數時候你只是想驗證用戶以正確的格式輸入了電子郵件。識別類似「2」而不是「@」的拼寫錯誤。所以我喜歡這個比原來的答案更好,但是aSeptik的答案是全面的,我也投了贊成票。 – darwindeeds 2012-07-18 18:22:59

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 pluginVerimail.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不斷驗證keyup,這意味着,只要你開始輸入,你會得到一個錯誤消息。通常很棒的插件,但這是一個交易斷路器 - 我寧願只在手動觸發時進行驗證,即在單擊提交按鈕或離開字段之前進行驗證。 – 2015-09-15 17:27:07

8

洛爾茲好得多

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

我更喜歡你的移動網站解決方案。另一個會帶來我的智能手機融化;)+1 – Hexodus 2013-08-27 18:36:11

+0

語法問題oin javascript – Sajith 2014-01-02 12:39:44

+0

它不會驗證äüõ等字母! – 2014-08-17 17:16:37

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的例子。 – 2014-06-03 14:39:54

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; 
     } 
    }; 
相關問題