【问题标题】:only allow English characters and numbers for text input只允许英文字符和数字进行文本输入
【发布时间】:2011-10-31 22:21:00
【问题描述】:

现场演示:http://jsfiddle.net/thisizmonster/DveuB/

如何更改此设置,以便在输入时只允许输入字符 A-Z、a-z、0-9,而不使用正则表达式?

【问题讨论】:

  • 你要的方法叫keypress,不是keyPress。
  • 为什么没有正则表达式?使用正则表达式真的很容易!
  • 您仍然需要为控制字符添加一个特殊情况。
  • 因为我不懂正则表达式!你能帮我做吗?
  • "while typing" 那么鼠标复制粘贴或者其他类型的非键盘输入可以吗?

标签: javascript jquery input validation alphanumeric


【解决方案1】:

假设你也想接受空格:

$("#user").keypress(function(event){
    var ew = event.which;
    if(ew == 32)
        return true;
    if(48 <= ew && ew <= 57)
        return true;
    if(65 <= ew && ew <= 90)
        return true;
    if(97 <= ew && ew <= 122)
        return true;
    return false;
});

如果您不想接受空格,请删除 if(ew == 32) return true;

JSFiddle

【讨论】:

  • 我刚刚在 OSX 上的文本框中输入了一个 é (alt-e-e),但它确实停止了 µ。 Safari 和 Firefox 都不会触发 OSX 上组合字符的按键事件。
  • @Gerelt 查看我更新的帖子以获取新链接,以防止“mu 太短”在谈论!
  • 不好的是用户可以粘贴格式错误的字符串
  • @Mir for Backspace 添加if (ew == 8) return true;
  • 能否就如何避免或限制 ý、Ý â、ê、î、ô、û 等字符输入或粘贴到输入字段中提供想法?
【解决方案2】:

&lt;input type="text" id="firstName"  onkeypress="return (event.charCode &gt;= 65 &amp;&amp; event.charCode &lt;= 90) || (event.charCode &gt;= 97 &amp;&amp; event.charCode &lt;= 122) || (event.charCode &gt;= 48 &amp;&amp; event.charCode &lt;= 57)" /&gt;

ASCII 字符集:https://www.w3schools.com/charsets/ref_html_ascii.asp

【讨论】:

  • 请注意,这不会阻止用户将不需要的字符复制并粘贴到输入字段中。
  • 您可以将“onkeypress”更改为“onblur”。
【解决方案3】:

所有其他答案都可以但不要阻止复制和粘贴非英文字符。

‌以下代码适用于(按键和复制粘贴):

<input type="text" name="text" oninput="this.value=this.value.replace(/[^A-Za-z\s]/g,'');">

【讨论】:

    【解决方案4】:

    你可以这样做:http://jsfiddle.net/DveuB/1/

    那么只有0-9,a-z和A-Z

    $(function(){
        $("#user").keypress(function(event){
            if ((event.charCode >= 48 && event.charCode <= 57) || // 0-9
                (event.charCode >= 65 && event.charCode <= 90) || // A-Z
                (event.charCode >= 97 && event.charCode <= 122))  // a-z
                alert("0-9, a-z or A-Z");
        });
    });
    

    更新: http://jsfiddle.net/DveuB/4/
    为了防止@mu 所说的:

    $("#user").keyup(function(event){
        if (event.altKey == false && event.ctrlKey == false)
            if ((event.keyCode >= 48 && event.keyCode <= 57 && event.shiftKey== false) ||
                (event.keyCode >= 65 && event.keyCode <= 90) ||
                (event.keyCode >= 97 && event.keyCode <= 122))
                alert("0-9, a-z or A-Z");
    });
    

    【讨论】:

    • 我可以在 Safari 和 Firefox 的 OSX 上获得一个组合字符(例如由 alt-ee 构建的 é),这些字符似乎不会触发按键事件。
    • if(event.keyCode == 8) return true;
    • 答案错过了。你应该测试重复“点”(。)你可以输入多个。
    【解决方案5】:
    <html>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script>
    $(document).ready(function () {
    
      $('.clsAlphaNoOnly').keypress(function (e) {  // Accept only alpha numerics, no special characters 
            var regex = new RegExp("^[a-zA-Z0-9 ]+$");
            var str = String.fromCharCode(!e.charCode ? e.which : e.charCode);
            if (regex.test(str)) {
                return true;
            }
    
            e.preventDefault();
            return false;
        }); 
    })
    </script>
    
    <body>
    
    <input class='clsAlphaNoOnly' type='text'>
    </body>
    </html>
    

    【讨论】:

      【解决方案6】:

      我正在使用这个功能。

      通过修改 RegExp,你可以去掉任何你个人不喜欢的字符。

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

      【讨论】:

        【解决方案7】:

        认为您必须编写一些 if 语句或类似的东西,获取键码并根据一些代表其他键码的数字对其进行验证:

        例如: if(keycode < 80) return false;

        【讨论】:

        • 此代码将阻止您使用退格键。您需要处理控制字符并始终允许它们。
        • 这只是示例。当然,您需要弄清楚您想要允许哪些代码(例如退格、箭头等)以及您想要忽略哪些代码。
        • 这和 OSX 上的 321X 有同样的问题。
        猜你喜欢
        • 1970-01-01
        • 2011-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-10
        • 1970-01-01
        • 1970-01-01
        • 2019-03-07
        相关资源
        最近更新 更多