Javascript正则表达式只允许特定字符

时间:2015-07-04 10:51:30

标签: javascript jquery regex

我使用以下代码只允许a-z,A-z,空格,换行符,标签。

但它不允许使用tab密钥。

这是我的javascript代码。

// Filter invalid characters in title
$('#p_title').keypress(function (e) {
        var regex = new RegExp("^[a-zA-Z0-9 \b\n\r\f\t\v]+$");
        var str = String.fromCharCode(!e.charCode ? e.which : e.charCode);
        if (regex.test(str)) {
                return true;
        }
        e.preventDefault();
        return false;
});

3 个答案:

答案 0 :(得分:1)

您需要双重转义所有转义序列以构建RegExp对象。不管怎样,只需在你的情况下使用正则表达式文字:

var regex = /^[a-zA-Z0-9 \b\n\r\f\t\v]+$/;

完整代码:

$('#p_title').keypress(function (e) {
        var regex = /^[a-zA-Z0-9 \b\n\r\f\t\v]+$/;
        var str = String.fromCharCode(!e.charCode ? e.which : e.charCode);
        if (regex.test(str)) {
           return true;
        }
        e.preventDefault();
        return false;
});

答案 1 :(得分:1)

尝试使用.on代替.keypress

http://jsfiddle.net/z9wvfj1e/1/

// Filter invalid characters in title
$('#p_title').on('keydown', function (e) {
        if (e.keyCode >=37 && e.keyCode <=40) return true;
        var regex = new RegExp("^[a-zA-Z0-9 \b\n\r\f\t\v]+$");
        var str = String.fromCharCode(!e.charCode ? e.which : e.charCode);
        if (regex.test(str)) {
                console.log(e);
                return true;
        }
        e.preventDefault();
        return false;
});

答案 2 :(得分:1)

这样的事情就像你需要的一样:

$('#p_title').keypress(function (e) {
  return /[a-z]|\s|\r?\n|\t/i.test(String.fromCharCode(e.which));
});

我正在对输入的字符是字母还是空格或换行符或标签进行不区分大小写的检查。

此外,您不需要使用jQuery检查e.charCode,因为:

  

event.which属性规范化event.keyCode和event.charCode。建议观看event.which键盘输入键。

     

https://api.jquery.com/event.which/