2011-05-13 53 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映射到字符。