HTML5限制输入字符

use*_*171 20 javascript html5 input

是否可以限制HTML5/JavaScript中某些字符的输入?例如,我可以在屏幕上有一个输入文本框,如果用户试图键入一个字母,它将不会显示在框中,因为我将其限制为只有数字?

我知道你可以使用将检查提交的模式,但我希望"坏"字符永远不会被输入.

Akh*_*ran 17

使用html5模式属性输入:

<input type="text" pattern="\d*" title="Only digits" />
Run Code Online (Sandbox Code Playgroud)

要么

使用html5数字类型输入:

<input type="number" />
Run Code Online (Sandbox Code Playgroud)

  • 这允许您输入任何内容,但是当您提交它时会告诉您它是错误的.不是我想要的. (36认同)
  • 就像海报一样,我想将输入限制为仅数字。如果输入电话号码的用户认为他的键盘坏了,因为没有出现字母,则不必太担心。不好假设,但我假设我的用户知道电话号码是由数字组成的。 (4认同)
  • 只需注意,根据http://html5pattern.com/ pattern只有"Firefox 4b7&Chrome 6&Opera 9&Safari 5.0.3"才支持此功能. (2认同)
  • 键入时丢弃无效字符的问题是用户可能认为自己的键盘坏了。最好等到他们提交输入以对其进行验证,然后拒绝它/发出消息。也许有什么可以立即拒绝键的持久性消息,直到输入了几个好字符之后,该消息才一直可见? (2认同)

jon*_*ins 7

输入文本框

<input type="text" onKeyDown="myFunction()" value="" />
Run Code Online (Sandbox Code Playgroud)

JavaScript的

function myFunction() {
    var e = event || window.event;  // get event object
    var key = e.keyCode || e.which; // get key cross-browser

    if (key < 48 || key > 57) { //if it is not a number ascii code
        //Prevent default action, which is inserting character
        if (e.preventDefault) e.preventDefault(); //normal browsers
            e.returnValue = false; //IE
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这也会阻止任何控制键! (2认同)

Cul*_*lub 6

KeyboardEvent.keyCode已弃用,因此这里有一个使用该HMLElement.input事件的解决方案。该解决方案使用简单的正则表达式,并且只需从任何输入中删除有问题的元素即可很好地处理复制粘贴。

我的正则表达式:/[^\w\d]/gi

  • 匹配除 ( ^) 单词字符 ( \w: az) 或数字 ( \d: 0-9) 之外的任何内容。
  • g修饰符使正则表达式全局化(第一次匹配后不返回)
  • i修饰符使正则表达式不区分大小写

使用此正则表达式,将不允许使用特殊字符和空格。如果您想添加更多字符,只需将允许的字符添加到正则表达式列表中即可。

function filterField(e) {
  let t = e.target;
  let badValues = /[^\w\d]/gi;
  t.value = t.value.replace(badValues, '');
}

let inputElement = document.getElementById('myInput');
inputElement.addEventListener('input', filterField);
Run Code Online (Sandbox Code Playgroud)
<input id="myInput" type="text" style="width: 90%; padding: .5rem;" placeholder="Type or paste (almost) anything...">
Run Code Online (Sandbox Code Playgroud)


wbt*_*11a 5

为了略微改善jonhopkins的优秀答案,我添加了退格键并删除了键接受,如下所示:

    function inputValidate(){
   var e = event || window.event;  
   var key = e.keyCode || e.which;                              
   if (((key>=48)&&(key<=57))||(key==8)||(key == 46)) { //allow backspace //and delete
           if (e.preventDefault) e.preventDefault(); 
           e.returnValue = false; 
   }
 }
Run Code Online (Sandbox Code Playgroud)

  • 尼斯.我没想到那些需要的东西. (2认同)
  • 还有一个!缺少, IF 实际上正在检查允许的键并阻止输入数字 (2认同)

小智 5

对于限制字符符号,例如“-”和“,”

<input type="text" pattern="[^-,]+">
Run Code Online (Sandbox Code Playgroud)

用于限制数字

<input type="text" pattern="[^0-9]+">
Run Code Online (Sandbox Code Playgroud)

用于限制字母

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