验证'%'和'('在JavaScript上

时间:2011-05-13 15:48:54

标签: 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))
        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);


 }

var名称是西班牙语,但它很容易理解。

问题如下。 '%'的键码与左箭头相同37,而'('的键码与右箭头相同。所以我的功能是不验证'%'和'('而且很糟糕。我不知道该怎么做,请帮忙。

3 个答案:

答案 0 :(得分:1)

keypress事件不会触发箭头和删除键,因此您只需删除if语句。 Darn you FireFox!

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

您最好的选择是使用keydown事件并查找keyCode而非charCode,并在必要时检查shift键。当按下shift键时,您必须手动将keyCodes映射到字符。

答案 1 :(得分:0)

稍微OT(道歉),但您可能想要查看其中一个Javascript库,例如JQuery;几乎所有这些都带有(或有)用于“验证输入”的库。

例如:如果您使用的是JQuery,可以考虑使用“验证”插件 - http://bassistance.de/jquery-plugins/jquery-plugin-validation/

答案 2 :(得分:0)

检查event.shiftKey

,检查是否按下了shift键
//Validate if its an arrow or delete button
if((key == 46) || (key == 8) || (key >= 37 && key <= 40 && !e.shiftKey))
    return true;

另一个选项(取决于您的应用)是处理keydown事件而不是keypress事件,这不会导致密钥代码重叠。