Dal*_*ale 131

一个使用正则表达式的简单示例,您可以将其更改为允许/禁止您喜欢的任何内容.

$('input').on('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;
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于粘贴的文本,也可能会阻止用户使用退格键,箭头键等非文本按键. (46认同)
  • 这将不允许在Firefox中退格 (5认同)
  • 这也适用于shift +组合键 (4认同)
  • 该解决方案适用于 Bootstrap-TagsInput 元素。要解决粘贴问题,您只需将“paste”添加到事件参数列表中,如下所示: $('input').on('keypress, Paste'', ()=>........ (3认同)

rex*_*mac 52

我一直在寻找一个限制输入仅限于字母数字字符的答案,但仍然允许使用控制字符(例如,退格键,删除键,制表符)和复制+粘贴.我尝试的答案都没有满足所有这些要求,所以我想出了以下使用该input事件.

$('input').on('input', function() {
  $(this).val($(this).val().replace(/[^a-z0-9]/gi, ''));
});
Run Code Online (Sandbox Code Playgroud)

编辑:
正如rinogo在评论中指出的那样,上面的代码片段在输入文本的中间键入时强制光标到输入的末尾.我相信下面的代码片段可以解决这个问题.

$('input').on('input', function() {
  var c = this.selectionStart,
      r = /[^a-z0-9]/gi,
      v = $(this).val();
  if(r.test(v)) {
    $(this).val(v.replace(r, ''));
    c--;
  }
  this.setSelectionRange(c, c);
});
Run Code Online (Sandbox Code Playgroud)

  • +1我正在向下滚动答案,寻找像这样的答案,否则我会提交我自己的答案。这个答案会立即过滤掉任何不允许的字符!伟大的! (3认同)
  • ...但是在Chrome和IE浏览器中,当您输入新字符或在输入文本*的中间使用退格键和删除键*时,光标移动到文本的末尾...:/是否有一个简单的解决这个问题?我非常想要这个工作! (3认同)
  • +1适用于粘贴文本,不会干扰FF的退格键和删除键,也不依赖于`event.which`或`event.keycode`!希望我能+10! (2认同)
  • @Juliano有趣的是,无论光标/插入符号当前位于何处,似乎selectionStart始终在Chrome Mobile上返回0.我不确定(这是)这是一个错误或预期的行为.我正在研究这个问题,当我了解更多信息时,我会更新我的回答或评论. (2认同)

Kev*_*edy 47

简短回答:阻止'按键'事件:

$("input").keypress(function(e){
    var charCode = !e.charCode ? e.which : e.charCode;

    if(/* Test for special character */ )
        e.preventDefault();
})
Run Code Online (Sandbox Code Playgroud)

答案长:使用像jquery.alphanum这样的插件

选择解决方案时需要考虑以下几点:

  • 粘贴文字
  • 上述代码可以防止像退格或F5这样的控制字符.
  • é,í,ä等
  • 阿拉伯语或中文......
  • 跨浏览器兼容性

我认为这个领域足够复杂,可以保证使用第三方插件.我尝试了几个可用的插件,但发现每个插件都有一些问题所以我继续写了jquery.alphanum.代码如下所示:

$("input").alphanum();
Run Code Online (Sandbox Code Playgroud)

或者对于更精细的控制,添加一些设置:

$("#username").alphanum({
    allow      : "€$£",
    disallow   : "xyz",
    allowUpper : false
});
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.

  • "so I went ahead and wrote jquery.alphanum" Awesome! (6认同)
  • 每个人似乎都对此感到非常兴奋,但用户可以轻松地粘贴带有任何字符的文本,这不会阻止这种情况。 (2认同)

kee*_*eal 14

使用HTML5的模式输入属性!

<input type="text" pattern="^[a-zA-Z0-9]+$" />
Run Code Online (Sandbox Code Playgroud)

  • 虽然此解决方案可以防止提交不需要的字符,但它不会阻止不需要的字符进入输入字段. (8认同)
  • 还存在用户未使用 HTML5 浏览器的风险。 (2认同)
  • 从 UX 经验来看,除了限制他们可以输入的内容之外,许多人更讨厌的一件事是被告知您事后做错了。- 强制输入是为了减少错误消息和无效通知。 (2认同)
  • @Julix这是一个具体情况的事情。有些字段只能是数字(价格或任何货币金额等),听字母字符输入是没有意义的。但是,是的,我的方法并不是真正解决 OP 问题,而是帮助解决 UX 问题的一种很好且简单的方法。 (2认同)

RSo*_*erg 11

看看jQuery字母数字插件.https://github.com/KevinSheedy/jquery.alphanum

//All of these are from their demo page
//only numbers and alpha characters
$('.sample1').alphanumeric();
//only numeric
$('.sample4').numeric();
//only numeric and the .
$('.sample5').numeric({allow:"."});
//all alphanumeric except the . 1 and a
$('.sample6').alphanumeric({ichars:'.1a'});
Run Code Online (Sandbox Code Playgroud)


Jam*_*art 10

使用正则表达式允许/禁止任何内容.此外,对于比接受的答案稍强一些的版本,允许没有与其关联的键值的字符(退格键,制表符,箭头键,删除等)可以通过首先通过按键事件来完成,根据键码而不是值来检查键.

$('#input').bind('keydown', function (event) {
        switch (event.keyCode) {
            case 8:  // Backspace
            case 9:  // Tab
            case 13: // Enter
            case 37: // Left
            case 38: // Up
            case 39: // Right
            case 40: // Down
            break;
            default:
            var regex = new RegExp("^[a-zA-Z0-9.,/ $@()]+$");
            var key = event.key;
            if (!regex.test(key)) {
                event.preventDefault();
                return false;
            }
            break;
        }
});
Run Code Online (Sandbox Code Playgroud)


cha*_*ler 9

你的文本框:

<input type="text" id="name">
Run Code Online (Sandbox Code Playgroud)

你的javascript:

$("#name").keypress(function(event) {
    var character = String.fromCharCode(event.keyCode);
    return isValid(character);     
});

function isValid(str) {
    return !/[~`!@#$%\^&*()+=\-\[\]\\';,/{}|\\":<>\?]/g.test(str);
}
Run Code Online (Sandbox Code Playgroud)

  • 但是,当复制和粘贴包含无效字符的文本时,这将不起作用 (2认同)

小智 8

内联使用简单的 onkeypress 事件。

 <input type="text" name="count"  onkeypress="return /[0-9a-zA-Z]/i.test(event.key)">
Run Code Online (Sandbox Code Playgroud)

  • 对于复制的文本,这将失败。 (6认同)
  • 请注意,“onkeypress”现已弃用,取而代之的是“onkeydown” (4认同)

小智 6

这是一个阻止用户输入字符“a”的示例

$(function() {
$('input:text').keydown(function(e) {
if(e.keyCode==65)
    return false;

});
});
Run Code Online (Sandbox Code Playgroud)

关键代码参考:
http://www.expandinghead.net/keycode.html

  • 如果 AlphaNumeric 不是适合您的插件,这实际上是一个不错的计划。我用 switch/case 语句让它工作。此示例不允许使用目录名称中不允许的字符: $('input[type='text'], textarea').keydown(function(ev){ switch(ev.keyCode){case 47: case 92: case 63: 情况 37: 情况 42: 情况 59: 情况 124: 情况 34: 情况 60: 情况 62: 返回 false;}; }); (2认同)

小智 5

我使用这段代码修改我看到的其他代码。仅当按下的按键或粘贴的文本通过模式测试(匹配)时,才对用户写入(此示例是仅允许 8 位数字的文本输入)

$("input").on("keypress paste", function(e){
    var c = this.selectionStart, v = $(this).val();
    if (e.type == "keypress")
        var key = String.fromCharCode(!e.charCode ? e.which : e.charCode)
    else
        var key = e.originalEvent.clipboardData.getData('Text')
    var val = v.substr(0, c) + key + v.substr(c, v.length)
    if (!val.match(/\d{0,8}/) || val.match(/\d{0,8}/).toString() != val) {
        e.preventDefault()
        return false
    }
})
Run Code Online (Sandbox Code Playgroud)


Ran*_*ana 5

$(function(){
      $('input').keyup(function(){
        var input_val = $(this).val();
        var inputRGEX = /^[a-zA-Z0-9]*$/;
        var inputResult = inputRGEX.test(input_val);
          if(!(inputResult))
          {     
            this.value = this.value.replace(/[^a-z0-9\s]/gi, '');
          }
       });
    });
Run Code Online (Sandbox Code Playgroud)