正在验证';%';和';(';在JavaScript上)

正在验证';%';和';(';在JavaScript上),javascript,validation,Javascript,Validation,大家好。我有以下功能来验证输入,具体取决于输入是数字、字母、字母数字还是电子邮件: 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)) re

大家好。我有以下功能来验证输入,具体取决于输入是数字、字母、字母数字还是电子邮件:

  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._\-+@]$/;
            break;
    }

    return permitidos.test(keychar);


 }
功能许可证(e,许可证){
var key=e.keyCode | | e.which;
//验证其是否为箭头或删除按钮
如果((key==46)| |(key==8)| |(key>=37&&key稍微有点奇怪(抱歉),但您可能想看看其中一个Javascript库,例如JQuery;几乎所有这些库都带有(或有)用于“验证输入”的库


例如:如果您使用jQuery,您可以考虑“验证”插件-< /p> 检查是否还按下了shift键:

//验证它是箭头还是删除按钮
如果((key==46)| |(key==8)| |(key>=37&&key则
keypress
事件不会触发箭头和删除键,因此您可以删除
if
语句。该死的FireFox

您混淆了
keyCode
charCode
,这是可以理解的,因为
event.keyCode
实际上包含
charCode
keyPress
事件,与
keydown
keyup
不同。
的keyCode>(
是57)(与
9
相同-这些字符位于同一个键上)。其字符码为40。箭头键没有字符码,因此不会触发
keypress
事件。(FireFox中除外…Argh!)


您最好使用
keydown
事件,查找
keyCode
,而不是
charCode
,必要时检查shift键。按下shift键时,您必须手动将键盘代码映射到字符。

这仅适用于用户必须按下
shift
才能生成字符的键盘
%
)。
//Validate if its an arrow or delete button
if((key == 46) || (key == 8) || (key >= 37 && key <= 40 && !e.shiftKey))
    return true;