Jquery文本框验证不适用于密钥'%'

时间:2014-04-04 11:28:29

标签: jquery

我的要求是只允许使用字母字符-'

但是,以下代码允许用户输入%

$('.regx').on("keypress", function (event) {
    var englishAlphabet = /[a-zA-Z-']/g;
    var key = String.fromCharCode(event.which);
    if (event.keyCode == 8 || event.keyCode == 37 || event.keyCode == 39 || englishAlphabet.test(key)) {
        return true;
    }
    return false;
});

请帮我解决这个问题!

2 个答案:

答案 0 :(得分:1)

删除event.keyCode == 37(这是%字符。)

此外:
-是event.keyCode == 45

'是event.keyCode == 39

所以...总之,你会留下来:

$('.regx').on("keypress", function (event) {
    var englishAlphabet = /[a-zA-Z-']/g;
    var key = String.fromCharCode(event.which);
    if (event.keyCode == 39 || event.keyCode == 45 || englishAlphabet.test(key)) {
        return true;
    }
    return false;
});

工作小提琴:http://jsfiddle.net/rsdPz/

答案 1 :(得分:0)

添加此

if ((event.KeyCode == 53 || event.KeyCode == 101) && event.shiftKey) {
     return false;
}

event.shiftKey检查shift键是否已按下

event.KeyCode == 53检查5已被按下

event.KeyCode == 101检查numpad 5

两者的组合使%

并将活动更改为keydown

  

% and left arrow的密钥代码为37


OP发表评论后更新

Updated Fiddle Demo

222

的KeyCode '

189

的KeyCode -
$('.regx').on("keydown", function (event) {
    var englishAlphabet = /[a-zA-Z-']/g;
    var key = String.fromCharCode(event.which);
    var KeyCode = event.KeyCode || event.which;
    console.log(KeyCode);
    if ([222, 53, 101, 189].indexOf(KeyCode) > -1 && event.shiftKey) { //add here
        return false;
    }
    if ([8, 37, 222, 189].indexOf(KeyCode) > -1 || englishAlphabet.test(key)) {
        return true;
    }
    return false;
});

Array.indexOf()