2014-03-31 37 views
0

我有一些jQuery和RegEx代碼很好用驗證電子郵件地址 ...只要地址基於簡單的拉丁字符即可。但是,當我們插入更復雜的多語言電子郵件地址時,我們的檢查無法使用基於正則表達式的原生HTML5驗證和驗證。使用jQuery和RegEx進行多語言電子郵件地址驗證

下面是我們使用的測試,中國電子郵件地址:

伊昭傑@郵件商務

而這裏的JS驗證代碼(我沒有打擾到去掉命名空間和內部工具方法)。我們有一個隱藏的「email」類型的HTML5輸入控件,我們將該電子郵件地址傳遞給該控件,並讓瀏覽器發揮其魔力。否則,我們使用正則表達式。

我們有什麼選擇?看起來像使用本地(例如基於瀏覽器的)驗證就是行不通的。

um.utils.isValidEmail = function (sEmail) { 
    var r = false; 
    var $emailTester = {}; 
    var emailRegex; 
    //----- 

    if (Modernizr.inputtypes.email === true) { 
     // Defer to native HTML5 email validation using a hidden <input type='email'> control 
     $emailTester = $("#idEmailTester"); 
     um.utils.assertSize($emailTester); 

     $emailTester.val(sEmail); 
     r = $emailTester[0].checkValidity(); 
    } else { 
     // Use a regular expression to do email validation 
     // Attribution http://www.regular-expressions.info/email.html 
     emailRegex = /^[a-zA-Z0-9.!#$%&'*+\/=?\^_`{|}~\-][email protected][a-zA-Z0-9](?:[a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?)*$/; 
     r = emailRegex.test(sEmail); 
    } 

    return r; 
}; 
+0

了多語種電子郵件之間的所有字符,你米ight只是更好地做「除了」每個電子郵件部分檢查,意味着一切,但不允許的字符http://en.wikipedia.org/wiki/Email_address –

+0

我想知道工程中是否有任何計劃爲HTML5電子郵件控件本地支持多語言驗證。如果沒有,通過Modernizer推遲到內在的HTML5功能是沒有任何意義的。 –

回答

0

查看XRegExp庫。它是一個Javascript庫,它實現了一個支持Unicode的正則表達式引擎,包括像\p{Letter}這樣的字符類,可以用來匹配通常ASCII範圍以外的字母。

1

對於任何使用Unicode的語言,有一種非常簡單的方法可以應用您所有的RegEx邏輯(可以輕鬆應用英語)。

對於匹配的範圍Unicode字符像所有的字母的[A-ZA-Z],我們可以使用

[\ u0041- \ u005A]其中\ u0041是十六進制碼爲\ u005A是十六進制代碼ž

'matchCAPS leTTer'.match(/[\u0041-\u005A]+/g) 
//output ["CAPS", "TT"] 

以同樣的方式,我們可以我們E的其他Unicode字符或根據它們的十六進制訂單它們的等效十六進制碼(例如:\ u0A10到\ u0A1F)由Unicode.org的

提供嘗試[電 - 觸]

這將匹配電和觸如果unicode.org順序

提供我不知道中國的:)