HTML5 限制输入字符

IT技术 javascript html input
2021-02-24 06:44:08

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

我知道您可以使用将在提交时检查的模式,但我希望永远不要输入“坏”字符。

6个回答

输入文本框

<input type="text" onKeyDown="myFunction()" value="" />

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
    }
}
这也会阻止任何控制键!
2021-04-29 06:44:08
我发现使用 onKeyPress 会产生预期的结果,而 onKeyDown 则需要检查箭头键、shift 等。所以尝试使用 onKeyPress,此解决方案按预期工作。我在下面添加了我的答案
2021-05-04 06:44:08
这应该是公认的答案,不过,我确实注意到下面的一些调整。
2021-05-11 06:44:08

对输入使用 html5 模式属性:

<input type="text" pattern="\d*" title="Only digits" />

或者

使用 html5 数字类型输入:

<input type="number" />
就像海报一样,我想将输入限制为仅数字。如果用户输入电话号码认为他的键盘坏了,因为没有出现字母,则不必太担心。不好假设,但我假设我的用户知道电话号码是由数字组成的。
2021-04-21 06:44:08
这允许您输入任何内容,但是当您提交时,它告诉您这是错误的。不是我要找的。
2021-05-04 06:44:08
请注意,根据html5pattern.com模式,只有“Firefox 4b7 & Chrome 6 & Opera 9 & Safari 5.0.3”及更高版本支持。
2021-05-12 06:44:08
您键入时丢弃无效字符的问题是用户可能认为他们的键盘坏了。最好等到他们提交输入以验证它,然后拒绝它/发送消息。也许有什么东西可以立即拒绝键持久消息仍然显示,直到几个不错的角色已被输入?
2021-05-20 06:44:08

为了稍微改进 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; 
   }
 }
好的。我没有想到需要那些。
2021-05-03 06:44:08
这可能应该包括 37(左箭头)和 39(右箭头),以便用户可以在字符之间移动并选择文本。
2021-05-05 06:44:08
嗯,当时(2+)我想说只是创建一个允许检查的字符数组。
2021-05-12 06:44:08
还有一个!缺少,IF 实际上是在检查允许的键并阻止输入数字
2021-05-18 06:44:08

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

<input type="text" pattern="[^-,]+">

用于限制数字

<input type="text" pattern="[^0-9]+">

用于限制字母表中的字母

<input type="text" pattern="[^a-zA-Z]+">
//improved wbt11a function

function numberFieldStrictInput(allowcomma, allownegative) {
    var e = event || window.event;  // get event object
    var key = e.keyCode ||`enter code here` e.which; // get key cross-browser


    if(key==8 || key==46 || key == 9 || key==17 || key==91 || key==18 || 
            key==116 || key==89 || key==67 || key==88 || key==35 || key==36) //back, delete tab, ctrl, win, alt, f5, paste, copy, cut, home, end
        return true;

    if(key == 109 && allownegative)
        return true;

    if(key == 190 && allowcomma)
        return true;

    if(key>=37 && key<=40) //arrows
        return true;

    if(key>=48 && key<=57) // top key
        return true;

    if(key>=96 && key<=105) //num key
        return true;
    console.log('Not allowed key pressed '+key);

    if (e.preventDefault) e.preventDefault(); //normal browsers
        e.returnValue = false; //IE

}   

//on input put onKeyDown="numberFieldStrictInput(1,0)"