2012-09-20 128 views
14

我發現jQuery驗證插件正則表達式不足以滿足我的要求。它接受任何電子郵件地址[email protected]作爲有效的電子郵件地址,而我想能夠提供這個正則表達式/^([a-zA-Z0-9_.-+])+\@(([a-zA -Z0-9 - ])+。)+([a-zA-Z0-9] {2,4})+ $ /,這樣它將驗證地址的完整.com部分。我更關心的是能夠提供我自己的正則表達式比獲得一個傻瓜證明正則表達式(因爲沒有電子郵件驗證的傻瓜證明正則表達式)重寫jQuery驗證插件電子郵件地址驗證

只是FYI:我也在做服務器端驗證,但在這一點上我並不擔心哪個電子郵件地址的正則表達式是正確的。

有沒有辦法做到這一點在jQuery驗證插件的「規則」部分?

這是我的規則,現在部分:

rules: { 
         email: { 
          required: { 
            depends:function(){ 
             $(this).val($.trim($(this).val())); 
             return true; 
            } 
           }, 
          email: true 
         }, 

回答

21

我不會做這個,但你需要添加自己的自定義驗證答案的緣故。

//custom validation rule 
$.validator.addMethod("customemail", 
    function(value, element) { 
     return /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(value); 
    }, 
    "Sorry, I've enabled very strict email validation" 
); 

然後你的規則補充:

rules: { 
        email: { 
         required: { 
           depends:function(){ 
            $(this).val($.trim($(this).val())); 
            return true; 
           } 
          }, 
         customemail: true 
        }, 
+0

這裏有一個錯誤,在正則表達式中: return /^([a-zA-Z0-9_.\-+])+\@ ((A-ZA-Z0-9 - ])+。)+([A-ZA-Z0-9] {2,4})+ $ /測試(值); –

+2

@Tom:電子郵件驗證正則表達式是錯誤的。它應該是**'return /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/。測試(價值);'** –

+2

你能否詳細說明你爲什麼不這樣做? – wal

6

你的正則表達式簡直是太嚴格,jQuery是正確的。

"this is a valid adress !"@yes.it.is 

我建議你閱讀本:Stop Validating Email Addresses With Your Complex Regex

+1

在現實生活中,每個人的電子郵件地址有.TLD,只有垃圾郵件發送者有優勢的情況下的字符。 – Acyra

+0

@Acyra你可以自由地編寫只有偶爾和偶然才能使用的代碼。但許多編碼人員更喜歡編寫遵循標準的代碼,並且可以處理所有電子郵件,而不僅僅是您已經看過的代碼。 –

+0

這是我的知識。技術上可能的電子郵件像xxx @ xxx嗎? (沒有.xx後綴)。默認的驗證插件允許它。 – Mark

0
// Add Custom Email Validation 
jQuery.validator.addMethod('customemail', function (emailaddr, element) { 
     emailaddr = emailaddr.replace(/\s+/g, ''); 
     return this.optional(element) || 
     emailaddr.match(/^\b[A-Z0-9._%-][email protected]@[A-Z0-9.-]+\.[A-Z]{2,4}\b$/i); 
}); 
+0

雖然這段代碼可能會回答這個問題,但請考慮提供一些解釋來幫助OP理解解決方案,並幫助其他可能有類似問題的讀者。 – CodeMouse92