JS只有字母数字和键盘上的空格

时间:2016-08-01 21:01:20

标签: javascript

我想将输入限制为字母数字和空格。

我希望它能在密钥上运行,以便用户看到其他字符被拒绝。换句话说,我不希望非法字符留在字段中,只有在提交后才会被删除。

我试过了......

$('#custName').keyup(function() {
    $(this).val($(this).val().match(/^[\w\s]+$/));
});

Fiddle

但是只要输入非法字符,就会删除整个字符串。

如何在保留合法字符的同时防止输入非法字符?

3 个答案:

答案 0 :(得分:3)

.match()正在返回:

  • 匹配时的字符串数组(在现有代码中只有一个字符串):在您的情况下 - 幸运的是 - 它被强制转换为字符串,因此它似乎按预期工作
  • null如果不匹配:这就是输入丢失的原因

您需要的更像是:

$('#custName').keyup(function() {
    $(this).val($(this).val().replace(/[^\w\s]+/g, ''));
});

正如Hanlet所注意到的,这种方法的另一个潜在问题是某些浏览器会针对不可打印的字符触发keyup事件。因此,您可能需要使用event.keyCode上的测试对其进行过滤。

答案 1 :(得分:1)

是的,就像那个@Arnauld,但我会用:

$('#price').on('change keyup paste mouseup', function() {
    this.val = $(this).val($(this).val().replace(/[^\w\s]+/g, ''));
}).bind('paste', function () {
    $(this).val(this.val.replace(/[^\w\s]+/g, ''));
});

这可以防止粘贴特殊字符。

答案 2 :(得分:1)

名称验证//将接受字母,空格和退格键

$('.nameonly').on('keydown', function(e){
    if ((e.which < 65 &&  e.which != 32 && e.which != 8) || e.which > 90 ) {
        return false;
    }
});