Jquery允许字母数字字符和非文本键按下

时间:2014-01-22 10:37:10

标签: javascript jquery regex

我有一个文本框,用户应该只输入字母数字字符,并且应该允许非空格键按下,如退格键,箭头键等。此外,它还适用于所有主流浏览器(如Mozilla Firefox)。

我尝试过一些示例,只允许我输入字母数字字符,但退格不适用于Mozilla Firefox中的以下示例。

$('input').bind('keypress', function (event) {
    var regex = new RegExp("^[a-zA-Z0-9]+$");
    var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
    if (!regex.test(key)) {
       event.preventDefault();
       return false;
    }
});

4 个答案:

答案 0 :(得分:10)

您可以添加[\b]以匹配并允许退格。

代码:

var regex = new RegExp("^[a-zA-Z0-9\b]+$");

演示:http://jsfiddle.net/M3bvN/

更新

您可以检查按下的键是否在允许键列表中(箭头,home,del,canc),而不是扩展您的正则表达式,如果是,请跳过验证。

这不会阻止用户复制/粘贴不允许的字符。所以也要在blur事件中执行验证控件(并且始终在服务器端)。

代码:

var keyCode = event.keyCode || event.which
// Don't validate the input if below arrow, delete and backspace keys were pressed 
if (keyCode == 8 || (keyCode >= 35 && keyCode <= 40)) { // Left / Up / Right / Down Arrow, Backspace, Delete keys
    return;
}

演示:http://jsfiddle.net/M3bvN/3/

答案 1 :(得分:2)

我正在研究这个问题,这就是我想出的:

var input = $('input[name="whatever"]');

input.bind('keypress', function(e)
{
    if ((e.which < 65 || e.which > 122) && (e.which < 48 || e.which > 57))
    {
        e.preventDefault();
    }
});

它只允许数字和字母,包括大写和小写。请注意,它也不允许使用空格键(这是我的应用程序所需的内容)。

答案 2 :(得分:1)

function lettersOnly(evt) {
    evt = (evt) ? evt : event;
    var charCode = (evt.charCode) ? evt.charCode : ((evt.keyCode) ? evt.keyCode :
        ((evt.which) ? evt.which : 0));
    if (charCode == 8 || charCode == 46 || charCode == 37 || charCode == 39) {
        return true;
    } else if (charCode > 31 && (charCode < 65 || charCode > 90) && (charCode < 97 || charCode > 122)) {
        // alert("Enter letters only.");
        return false;
    }
    return true;
}

答案 3 :(得分:0)

$('.alphanumeric').bind('keypress', function (e) {
        var specialKeys = new Array();
        specialKeys.push(8); //Backspace
        specialKeys.push(9); //Tab
        specialKeys.push(46); //Delete
        specialKeys.push(36); //Home
        specialKeys.push(35); //End
        specialKeys.push(37); //Left
        specialKeys.push(39); //Right
        var keyCode = e.keyCode == 0 ? e.charCode : e.keyCode;
        var ret = ((keyCode >= 48 && keyCode <= 57) || (keyCode >= 65 && keyCode <= 90) || (keyCode >= 97 && keyCode <= 122) || (specialKeys.indexOf(e.keyCode) != -1 && e.charCode != e.keyCode));
        return ret;
    });

此代码也将是Firefox