2011-05-13 55 views
5

大家好,我有以下功能驗證輸入取決於如果是數字,字母,字母數字和電子郵件。驗證「%」和「(」 JavaScript的

function permite(e, permitidos) { 

    var key = e.keyCode || e.which; 

    //Validate if its an arrow or delete button 
    if((key == 46) || (key == 8) || (key >= 37 && key <= 40)) 
     return true; 

    var keychar = String.fromCharCode(key); 

    switch(permitidos) { 
     case 'num': 
      permitidos = /^[0-9]$/; 
      break; 
     case 'car': 
      permitidos = /^[\sa-zA-Z]$/; 
      break; 
     case 'num_car': 
      permitidos = /^[\sa-zA-Z0-9]$/; 
      break; 
     case 'correo': 
      permitidos = /^[a-zA-Z0-9._\[email protected]]$/; 
      break; 
    } 

    return permitidos.test(keychar); 


} 

var這個名字在西班牙語,但其一個簡單易懂的功能

問題是:'%'的鍵碼是37,與左箭頭相同,'('的鍵碼是40,與右箭頭相同,所以我的功能是沒有驗證「%」和「(」和它吮吸。我不知道該怎麼辦,請大家幫忙。

回答

0

略微OT(道歉),但你可能想看看其中的一個Javascript庫,例如JQuery;幾乎所有人都有(或有)用於「驗證輸入」的庫。

例如:如果你使用JQuery,你可以考慮在「驗證」插件 - http://bassistance.de/jquery-plugins/jquery-plugin-validation/

+0

應該是一個評論。 – 2011-05-13 16:43:27

0

檢查Shift鍵是否被按下,以及通過檢查event.shiftKey

//Validate if its an arrow or delete button 
if((key == 46) || (key == 8) || (key >= 37 && key <= 40 && !e.shiftKey)) 
    return true; 

另一種選擇(取決於您的應用程序)是處理​​事件而不是keypress事件,這不會導致鍵碼重疊。

+0

這隻適用於用戶必須爲了產生'%'或'('而必須壓低'SHIFT'的鍵盤。 – 2011-05-13 16:45:22

1

keypress事件不會觸發箭頭和刪除鍵,因此您可以刪除 if語句。 爲您提供FireFox!

你混合了keyCodecharCode,這是可以理解的,因爲event.keyCode實際上包含charCodekeyPress事件,不像​​和keyup(的keyCode是57(與9相同 - 這些字符在同一個鍵上)。它的charCode是40.箭頭鍵沒有charCodes,所以它們不會觸發keypress事件。 (除了FireFox ...唉!)

最好的辦法是使用​​事件並查找keyCode而不是charCode,必要時檢查shift鍵。按下shift鍵後,您必須手動將keyCode映射到字符。