如何使用jQuery在HTML输入框中只允许数字(0-9)?

How to allow only numeric (0-9) in HTML inputbox using jQuery?

提问人: 提问时间:6/15/2009 最后编辑:4 revs, 3 users 57%Prashant 更新时间:4/2/2022 访问量:1857778

问:

我正在创建一个网页,其中有一个输入文本字段,其中我只想允许数字字符,例如 (0,1,2,3,4,5...9) 0-9。

如何使用jQuery执行此操作?

jQuery HTML 验证 数字

评论

79赞 cjk 6/15/2009
请记住,您不能依赖客户端验证 - 如果用户关闭了 JavaScript,或者没有使用 JavaScript 兼容的浏览器,您还需要在服务器上进行验证。
50赞 ZX12R 4/11/2012
你考虑过HTML5吗?<input type=“number” />。使用 min 和 max 属性,您也可以限制输入
6赞 Richard 6/20/2012
我认为您应该检查 keyup 事件上的输入值,而不是检查键码,因为它在键盘的差异和其他不同方面更加可靠。
14赞 MiniQuark 12/12/2012
我完全同意理查德的观点:不要使用键码。例如,接受的答案在法语键盘上不起作用,因为您需要按“Shift”才能在这些键盘上键入数字。恕我直言,密钥代码风险太大。
3赞 Eric 3/20/2013
@ZX12R 在任何当前版本的 IE 中都不起作用。在你自己的东西上使用最新的代码来保持新鲜感是件好事,但对于几乎所有专业项目来说,这都不是一个真正的选择。caniuse.com/#feat=input-number

答:

1361赞 34 revs, 17 users 70%emkey08 #1

注意:这是一个更新的答案。下面的评论指的是一个旧版本,它搞砸了键码。

j查询

在 JSFiddle 上自己尝试一下。

没有原生的 jQuery 实现,但您可以使用以下插件过滤文本的输入值(支持复制+粘贴、拖放、键盘快捷键、上下文菜单操作、不可键入的键、插入符号位置、不同的键盘布局、有效性错误消息以及自 IE 9 以来的所有浏览器):<input>inputFilter

// Restricts input for the set of matched elements to the given inputFilter function.
(function($) {
  $.fn.inputFilter = function(callback, errMsg) {
    return this.on("input keydown keyup mousedown mouseup select contextmenu drop focusout", function(e) {
      if (callback(this.value)) {
        // Accepted value
        if (["keydown","mousedown","focusout"].indexOf(e.type) >= 0){
          $(this).removeClass("input-error");
          this.setCustomValidity("");
        }
        this.oldValue = this.value;
        this.oldSelectionStart = this.selectionStart;
        this.oldSelectionEnd = this.selectionEnd;
      } else if (this.hasOwnProperty("oldValue")) {
        // Rejected value - restore the previous one
        $(this).addClass("input-error");
        this.setCustomValidity(errMsg);
        this.reportValidity();
        this.value = this.oldValue;
        this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
      } else {
        // Rejected value - nothing to restore
        this.value = "";
      }
    });
  };
}(jQuery));

您现在可以使用该插件安装输入过滤器:inputFilter

$(document).ready(function() {
  $("#myTextBox").inputFilter(function(value) {
    return /^\d*$/.test(value);    // Allow digits only, using a RegExp
  },"Only digits allowed");
});

将您喜欢的样式应用于 input-error 类。这里有一个建议:

.input-error{
  outline: 1px solid red;
}

有关更多输入筛选器示例,请参阅 JSFiddle 演示。另请注意,您仍然必须进行服务器端验证!

纯 JavaScript(不含 jQuery)

实际上并不需要jQuery,您也可以使用纯JavaScript做同样的事情。请看这个答案

[HTML格式] 5

HTML 5 有一个原生解决方案(参见规范),但请注意,浏览器支持各不相同:<input type="number">

  • 大多数浏览器只会在提交表单时验证输入,而不是在键入时验证输入。
  • 大多数移动浏览器不支持 和 属性。stepminmax
  • Chrome(版本 71.0.3578.98)仍允许用户输入字符并进入字段。另请参阅此问题eE
  • Firefox(版本 64.0)和 Edge(EdgeHTML 版本 17.17134)仍然允许用户在字段中输入任何文本。

在 w3schools.com 上亲自尝试一下。

评论

47赞 Michael L Watson 9/16/2011
谢谢!event.keyCode == 46 ||event.keyCode == 8 ||event.keyCode == 190 如果你想要小数
9赞 Anthony Queen 1/12/2012
添加 keyCodes 37 和 39 以允许在 txt 框中向左和向右箭头导航,例如: if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 37 || event.keyCode == 39)
22赞 Allen Rice 1/19/2012
哎呀,刚刚从我们的测试人员那里发现了一个问题。您必须阻止用户按住 shift 键并按下数字键,否则输入将允许 !@#$%^&*()
6赞 Anthony Queen 1/20/2012
确认了 shift+ 错误。此外,ALT+ 数字键盘几乎允许任何内容(即 Alt+321 = A、Alt+322 = B 等)。服务器端验证的另一个案例。
149赞 MiniQuark 12/12/2012
我真的不同意这个答案:玩按键代码真的太冒险了,因为你无法确定键盘布局是什么。例如,在法语键盘上,用户必须按 shift 键才能键入数字。所以这段代码根本行不通。因此,请进行验证,而不是使用此密钥代码破解。
34赞 Ivar #2
$(document).ready(function() {
    $("#txtboxToFilter").keydown(function(event) {
        // Allow only backspace and delete
        if ( event.keyCode == 46 || event.keyCode == 8 ) {
            // let it happen, don't do anything
        }
        else {
            // Ensure that it is a number and stop the keypress
            if (event.keyCode < 48 || event.keyCode > 57 ) {
                event.preventDefault(); 
            }   
        }
    });
});

来源:http://snipt.net/GerryEng/jquery-making-textfield-only-accept-numeric-values

评论

7赞 Alan Moore 6/15/2009
哇,空的“如果”块和魔术数字!我只是在嘴里吐了一点。:D但说真的,当您可以将输入与正则表达式 /^[.\d]+$/ 匹配时,为什么要麻烦呢?“8”代表什么?
0赞 Ivar 6/15/2009
@Alan:哈哈,我不知道——我直接从源头复制的。我会写“if(event.keyCode != 46 && event.keyCode != 8)”,或者像你说的那样使用正则表达式。我想 8 代表删除键。
4赞 Anton 8/20/2010
例如,尝试按 Shift + 8 - 您的验证将允许 * 进入
0赞 Shyju 10/30/2010
这很好。会好得多,如果它处理 Shift 键+数字(特殊字符,如 !@#$%^..)
8赞 4 revs, 2 users 68%karim79 #3

您可以使用以下 JavaScript 函数:

function maskInput(e) {
    //check if we have "e" or "window.event" and use them as "event"
        //Firefox doesn't have window.event 
    var event = e || window.event 

    var key_code = event.keyCode;
    var oElement = e ? e.target : window.event.srcElement;
    if (!event.shiftKey && !event.ctrlKey && !event.altKey) {
        if ((key_code > 47 && key_code < 58) ||
            (key_code > 95 && key_code < 106)) {

            if (key_code > 95)
                 key_code -= (95-47);
            oElement.value = oElement.value;
        } else if(key_code == 8) {
            oElement.value = oElement.value;
        } else if(key_code != 9) {
            event.returnValue = false;
        }
    }
}

您可以将其绑定到文本框,如下所示:

$(document).ready(function() {
    $('#myTextbox').keydown(maskInput);
});

我在生产中使用了上面的内容,它运行良好,并且是跨浏览器的。此外,它不依赖于 jQuery,因此您可以使用内联 JavaScript 将其绑定到文本框:

<input type="text" name="aNumberField" onkeydown="javascript:maskInput()"/>

评论

0赞 Kiran Ruth R 6/24/2013
当有人在输入中粘贴非数字文本时,这将失败。任何想法,我们如何克服这个问题?无法将我的思想包裹在这件事上.
5赞 Coppermill #4

需要确保您的数字键盘和 Tab 键也能正常工作

 // Allow only backspace and delete
            if (event.keyCode == 46 || event.keyCode == 8  || event.keyCode == 9) {
                // let it happen, don't do anything
            }
            else {
                // Ensure that it is a number and stop the keypress
                if ((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 96 && event.keyCode <= 105)) {

                }
                else {
                    event.preventDefault();
                }
            }
107赞 6 revs, 4 users 69%Umang #5

你可以只使用一个简单的 JavaScript 正则表达式来测试纯数字字符:

/^[0-9]+$/.test(input);

如果输入为数字,则返回 true,如果不是,则返回 false。

或者对于事件键码,简单使用如下:

     // Allow: backspace, delete, tab, escape, enter, ctrl+A and .
    if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 ||
         // Allow: Ctrl+A
        (e.keyCode == 65 && e.ctrlKey === true) || 
         // Allow: home, end, left, right
        (e.keyCode >= 35 && e.keyCode <= 39)) {
             // let it happen, don't do anything
             return;
    }

    var charValue = String.fromCharCode(e.keyCode)
        , valid = /^[0-9]+$/.test(charValue);

    if (!valid) {
        e.preventDefault();
    }

评论

11赞 Patrick Fisher 6/12/2012
请参阅我的答案,了解此方法的实现。
0赞 andrsnn 7/22/2014
检查数字按键而不是检查正则表达式不会花费更少的处理器时间吗?
0赞 Laurens Swart 8/25/2023
这不会阻止使用 CTRL+V 粘贴字母,对吧?
200赞 4 revs, 4 users 86%Kelsey #6

这是我使用的函数:

// Numeric only control handler
jQuery.fn.ForceNumericOnly =
function()
{
    return this.each(function()
    {
        $(this).keydown(function(e)
        {
            var key = e.charCode || e.keyCode || 0;
            // allow backspace, tab, delete, enter, arrows, numbers and keypad numbers ONLY
            // home, end, period, and numpad decimal
            return (
                key == 8 || 
                key == 9 ||
                key == 13 ||
                key == 46 ||
                key == 110 ||
                key == 190 ||
                (key >= 35 && key <= 40) ||
                (key >= 48 && key <= 57) ||
                (key >= 96 && key <= 105));
        });
    });
};

然后,可以通过执行以下操作将其附加到控件:

$("#yourTextBoxName").ForceNumericOnly();

评论

2赞 Volmar 8/10/2010
我发现这很有用,但我发现了一个令人讨厌的“错误”。当我在iMac上使用它时,它允许一些字母,例如A和E.似乎PC上的键盘数字是iMac上的字母,而Mac键盘与常规数字相同。有人知道如何让它在 Mac 和 PC 上工作吗?
3赞 bman 8/6/2011
键“Home”、“End”也不起作用。彼得建议这是一个更好的解决方案:west-wind.com/weblog/posts/2011/Apr/22/......
0赞 powtac 9/4/2011
为什么有?return this.each(function()
2赞 Oliver Pearmain 9/29/2011
@powtac - 所以你可以打电话给.ForceNumericOnly() 在多个对象上。例如... $(“input[type='text']”)。ForceNumericOnly() 函数
1赞 Jose Rui Santos 12/1/2011
@powtac from 是允许多个对象,正如 HaggleLad 所说,部分是将 jQuery 对象返回给调用者,以允许链接,例如eachreturn this.each(function()return$("input[type='text'").ForceNumericOnly().show()
45赞 6 revs, 2 users 82%Amr Elgarhy #7

使用 JavaScript 函数 isNaN

if (isNaN($('#inputid').val()))

if (isNaN(document.getElementById('inputid').val()))

if (isNaN(document.getElementById('inputid').value))

更新:这里有一篇很好的文章,讨论它,但使用 jQuery:将 HTML 文本框中的输入限制为数值

评论

41赞 GalacticCowboy 4/29/2010
井。。。“不使用 JQuery”,除了示例中使用 JQuery 的部分......
0赞 mpen 3/18/2011
document.getElementById('inputid').val()纨绔子弟。。那仍然是jquery。 是一个jquery的东西。用.val().value
0赞 Transformer 4/2/2017
嗨,我怎样才能确保数值介于 之间 我无法让它进入decimal0.024.0.
10赞 2 revs, 2 users 69%user261922 #8
function suppressNonNumericInput(event){
        if( !(event.keyCode == 8                                // backspace
            || event.keyCode == 46                              // delete
            || (event.keyCode >= 35 && event.keyCode <= 40)     // arrow keys/home/end
            || (event.keyCode >= 48 && event.keyCode <= 57)     // numbers on keyboard
            || (event.keyCode >= 96 && event.keyCode <= 105))   // number on keypad
            ) {
                event.preventDefault();     // Prevent character input
        }
    }

评论

0赞 Transformer 4/2/2017
嗨,我怎样才能确保数值介于 之间 我无法让它进入decimal0.024.0.
1赞 Jos 6/27/2023
很棒的解决方案。同时添加 keyCode 9 以允许 TAB
0赞 arash yousefi 7/11/2023
感谢您的解决方案。准确而清晰。
5赞 2 revs, 2 users 91%crash #9

我想帮一点忙,我制作了我的版本,功能......onlyNumbers

function onlyNumbers(e){
    var keynum;
    var keychar;

    if(window.event){  //IE
        keynum = e.keyCode;
    }
    if(e.which){ //Netscape/Firefox/Opera
        keynum = e.which;
    }
    if((keynum == 8 || keynum == 9 || keynum == 46 || (keynum >= 35 && keynum <= 40) ||
       (event.keyCode >= 96 && event.keyCode <= 105)))return true;

    if(keynum == 110 || keynum == 190){
        var checkdot=document.getElementById('price').value;
        var i=0;
        for(i=0;i<checkdot.length;i++){
            if(checkdot[i]=='.')return false;
        }
        if(checkdot.length==0)document.getElementById('price').value='0';
        return true;
    }
    keychar = String.fromCharCode(keynum);

    return !isNaN(keychar);
}

只需添加输入标签“...输入。。。id=“price” onkeydown=“return onlyNumbers(event)”...”你就完了;)

31赞 Mike #10

我在内部通用 js 文件中使用它。我只是将类添加到需要此行为的任何输入中。

$(".numericOnly").keypress(function (e) {
    if (String.fromCharCode(e.keyCode).match(/[^0-9]/g)) return false;
});

评论

3赞 Silvio Delgado 8/25/2013
漂亮、优雅、有用的代码!谢谢。但您必须添加 keyup 和 keydown 事件。
11赞 4 revs, 3 users 88%Adrian #11

使用 jQuery.validate 相当简单的事情

$(document).ready(function() {
    $("#formID").validate({
        rules: {
            field_name: {
                numericOnly:true
            }
        }
    });
});

$.validator.addMethod('numericOnly', function (value) {
       return /^[0-9]+$/.test(value);
}, 'Please only enter numeric values (0-9)');
6赞 SoN9ne #12

这就是为什么我最近写信来实现这一目标。我知道这个问题已经得到解答,但我把它留到以后使用。

此方法只允许 0-9 键盘和小键盘、退格键、制表符、左右箭头(正常形式操作)

$(".numbersonly-format").keydown(function (event) {
    // Prevent shift key since its not needed
    if (event.shiftKey == true) {
        event.preventDefault();
    }
    // Allow Only: keyboard 0-9, numpad 0-9, backspace, tab, left arrow, right arrow, delete
    if ((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 96 && event.keyCode <= 105) || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 37 || event.keyCode == 39 || event.keyCode == 46) {
        // Allow normal operation
    } else {
        // Prevent the rest
        event.preventDefault();
    }
});
180赞 3 revs, 2 users 50%Patrick Fisher #13

内嵌:

<input name="number" onkeyup="if (/\D/g.test(this.value)) this.value = this.value.replace(/\D/g,'')">

不显眼的样式(使用 jQuery):

$('input[name="number"]').keyup(function(e)
                                {
  if (/\D/g.test(this.value))
  {
    // Filter non-digits from input value.
    this.value = this.value.replace(/\D/g, '');
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input name="number">

评论

2赞 Phrogz 1/19/2012
这会将插入符号移动到末尾,即使用户按向左箭头键也是如此。
1赞 Patrick Fisher 3/2/2012
@phrogz,试试这个: .onkeyup="if (/\D/g.test(this.value)) this.value = this.value.replace(/\D/g,'')"
1赞 mhenry1384 1/22/2013
至少在 Chrome 24 上,这会导致非数字出现,然后立即删除,这看起来很俗气(与首先阻止输入非数字相比)。
6赞 Patrick Fisher 1/24/2013
@mhenry1384 这是预期的行为。我发现这是一个很好的反馈,但如果你不喜欢这样,那么关键代码方法将是你要找的。
2赞 Johny Skovdal 2/19/2013
您可以修改为以防止前导级数为零。/[^0-9]|^0+(?!$)/g
6赞 jamesbar2 #14

我根据上面@user261922的帖子写了我的,略有修改,因此您可以选择全部、选项卡,并且可以在同一页面上处理多个“仅数字”字段。

var prevKey = -1, prevControl = '';
$(document).ready(function () {
    $(".OnlyNumbers").keydown(function (event) {
        if (!(event.keyCode == 8                                // backspace
            || event.keyCode == 9                               // tab
            || event.keyCode == 17                              // ctrl
            || event.keyCode == 46                              // delete
            || (event.keyCode >= 35 && event.keyCode <= 40)     // arrow keys/home/end
            || (event.keyCode >= 48 && event.keyCode <= 57)     // numbers on keyboard
            || (event.keyCode >= 96 && event.keyCode <= 105)    // number on keypad
            || (event.keyCode == 65 && prevKey == 17 && prevControl == event.currentTarget.id))          // ctrl + a, on same control
        ) {
            event.preventDefault();     // Prevent character input
        }
        else {
            prevKey = event.keyCode;
            prevControl = event.currentTarget.id;
        }
    });
});
6赞 2 revs, 2 users 68%ngwanevic #15

您希望允许选项卡:

$("#txtboxToFilter").keydown(function(event) {
    // Allow only backspace and delete
    if ( event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 ) {
        // let it happen, don't do anything
    }
    else {
        // Ensure that it is a number and stop the keypress
        if ((event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105 )) {
            event.preventDefault(); 
        }   
    }
});
14赞 Vitalii Fedorenko #16

您可以尝试 HTML5 数字输入:

<input type="number" value="0" min="0"> 

对于不合规的浏览器,有 ModernizrWebforms2 回退。

评论

0赞 xfscrypt 2/1/2015
这仍然允许逗号的
26赞 2 revs, 2 users 73%Summved Jain #17

对我来说更简单的一个是

jQuery('.plan_eff').keyup(function () {     
  this.value = this.value.replace(/[^1-9\.]/g,'');
});

评论

8赞 Chalise 1/3/2013
只需要确保你使用包括 OP 的 0-9 要求this.value.replace(/[^0-9\.]/g,'');
7赞 Asif #18

我认为这对每个人都有帮助

  $('input.valid-number').bind('keypress', function(e) { 
return ( e.which!=8 && e.which!=0 && (e.which<48 || e.which>57)) ? false : true ;
  })

评论

0赞 tomvo 6/6/2013
您忘记了键盘输入。这将包括:if(event.which!=8 && event.which!=0 && (event.which<48 || event.which>57) && (event.which<96 || event.which>105)) return;
7赞 2 revs, 2 users 96%Dima #19

这是我前段时间创建的一个快速解决方案。你可以在我的文章中阅读更多关于它的信息:

http://ajax911.com/numbers-numeric-field-jquery/

$("#textfield").bind("keyup paste", function(){
    setTimeout(jQuery.proxy(function() {
        this.val(this.val().replace(/[^0-9]/g, ''));
    }, $(this)), 0);
});
6赞 2 revsMathew Foscarini #20

这是使用 jQuery UI Widget 工厂的答案。您可以轻松自定义允许的字符。

$('input').numberOnly({
    valid: "0123456789+-.$,"
});

这将允许数字、数字符号和美元金额。

$.widget('themex.numberOnly', {
    options: {
        valid : "0123456789",
        allow : [46,8,9,27,13,35,39],
        ctrl : [65],
        alt : [],
        extra : []
    },
    _create: function() {
        var self = this;

        self.element.keypress(function(event){
            if(self._codeInArray(event,self.options.allow) || self._codeInArray(event,self.options.extra))
            {
                return;
            }
            if(event.ctrlKey && self._codeInArray(event,self.options.ctrl))
            {
                return;
            }
            if(event.altKey && self._codeInArray(event,self.options.alt))
            {
                return;
            }
            if(!event.shiftKey && !event.altKey && !event.ctrlKey)
            {
                if(self.options.valid.indexOf(String.fromCharCode(event.keyCode)) != -1)
                {
                    return;
                }
            }
            event.preventDefault(); 
        });
    },

    _codeInArray : function(event,codes) {
        for(code in codes)
        {
            if(event.keyCode == codes[code])
            {
                return true;
            }
        }
        return false;
    }
});

评论

0赞 gordon 8/24/2016
这是否确保 $ 然后 + - 作为第一个或第一个/第二个字符,然后只有 1 个小数点?
6赞 Jonathan #21

这似乎是牢不可破的。

// Prevent NULL input and replace text.
$(document).on('change', 'input[type="number"]', function (event) {
    this.value = this.value.replace(/[^0-9\.]+/g, '');
    if (this.value < 1) this.value = 0;
});

// Block non-numeric chars.
$(document).on('keypress', 'input[type="number"]', function (event) {
    return (((event.which > 47) && (event.which < 58)) || (event.which == 13));
});
8赞 Vincent #22

我想到了一个非常好的简单解决方案,它不会像其他解决方案那样阻止用户选择文本或复制粘贴。 jQuery样式:)

$("input.inputPhone").keyup(function() {
    var jThis=$(this);
    var notNumber=new RegExp("[^0-9]","g");
    var val=jThis.val();

    //Math before replacing to prevent losing keyboard selection 
    if(val.match(notNumber))
    { jThis.val(val.replace(notNumber,"")); }
}).keyup(); //Trigger on page load to sanitize values set by server

评论

0赞 Vivekh 12/27/2013
嘿,我正在使用它,但我真正想要的是让他像 1.2 或 3.455 那样点
22赞 2 revs, 2 users 60%Ganesh Babu #23

您可以使用这个非常简单的解决方案来执行相同的操作

$("input.numbers").keypress(function(event) {
  return /\d/.test(String.fromCharCode(event.keyCode));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="numbers" name="field_name" />

我参考了此链接以获取解决方案。它工作得很好!!

评论

0赞 Zango 10/10/2014
也许这更好 /\d|\./ 允许.十进制数
0赞 Kirataka 3/28/2016
这在克罗姆中非常有效。但在 Mozilla FireFox 中不是这样
0赞 Transformer 4/2/2017
嗨,我怎样才能确保数值介于 之间 我无法让它进入decimal0.024.0.
26赞 guest #24

为什么这么复杂?你甚至不需要 jQuery,因为有一个 HTML5 模式属性:

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

很酷的是,它会在移动设备上显示一个数字键盘,这比使用 jQuery 要好得多。

评论

2赞 Markus 1/16/2015
这应该有更多的选票。如果有的话,你也可以为非 html5 浏览器添加一个后备正则表达式 - 但无论如何,数据验证都应该在服务器端处理。
0赞 guest 7/25/2015
到目前为止,大多数浏览器似乎都很好地支持它,因此 modernizr 支持并不那么重要:caniuse.com/#search=pattern Safari 运行良好,即使它在此站点上被列为部分支持。试试吧!
0赞 BinaryJoe01 8/30/2017
@guest 非常感谢你。最快捷最简单的答案!在我看来,最好的答案。
14赞 2 revsvickisys #25

HTML5 中的 pattern 属性指定检查元素值的正则表达式。

  <input  type="text" pattern="[0-9]{1,3}" value="" />

注意:pattern 属性适用于以下输入类型:text、search、url、tel、email 和 password。

  • [0-9] 可以替换为任何正则表达式条件。

  • {1,3} 它表示可以输入的最小 1 位和最多 3 位。

评论

0赞 Transformer 4/2/2017
嗨,我怎样才能确保数值介于 之间 我无法让它进入decimal0.024.0.
1赞 vickisys 4/14/2017
@transformer试试这个<input type=“number” pattern=“[0-9]+([\.,][0-9]+)?” step=“0.01”>
108赞 6 revs, 2 users 96%Hamid Afarinesh Far #26

您可以像这样对输入事件使用:

$(document).on("input", ".numeric", function() {
    this.value = this.value.replace(/\D/g,'');
});

但是,这个代码权限是什么?

  • 它适用于移动浏览器(keydown 和 keyCode 有问题)。
  • 它也适用于 AJAX 生成的内容,因为我们使用的是“on”。
  • 比 keydown 更好的性能,例如在粘贴事件上。

评论

8赞 Jeremy Harris 10/2/2015
我觉得这是一个比公认的答案更强大(也更简单)的解决方案。
0赞 Alfergon 1/22/2016
如果使用 replace(/\D/g, '') 就更简单了
0赞 Transformer 4/2/2017
嗨,我怎样才能确保数值介于 之间 我无法让它进入decimal0.024.0.
1赞 HasanG 8/29/2018
我建议使用this.value = Number(this.value.replace(/\D/g, ''));
0赞 raklos 1/25/2019
很好的答案,允许通过切换类轻松切换输入是否为数字
72赞 2 revs, 2 users 89%Rid Iculous #27

短小精悍 - 即使这在 30+ 个答案;)后永远不会引起太多关注

  $('#number_only').bind('keyup paste', function(){
        this.value = this.value.replace(/[^0-9]/g, '');
  });

评论

7赞 WizLiz 8/4/2016
我会用输入代替键控,否则您可以保持按下一个字母,然后单击以将焦点从文本框中移开,并使文本保持原样。输入确保不会发生这种情况
3赞 BradM 1/17/2017
感谢您的正则表达式 - 但这是一个更好的事件处理程序: $('#number_only').on('input propertychange', function(){ this.value = this.value.replace(/[^0-9]/g, '');
6赞 Paul 5/3/2017
仅供参考 - 问题没有要求它,但这不允许小数(例如 12.75)。绑定“输入”而不是“键控”可以使用户体验更流畅,而不是在一瞬间看到他们的角色,然后将其删除。
10赞 2 revs, 2 users 80%V J I #28

在 HTML 代码中尝试它,它自己就像 onkeypress 和 onpast 一样

<input type="text" onkeypress="return event.charCode >= 48 && event.charCode <= 57" onpaste="return false">
11赞 Reza Baradaran Gazorisangi #29

以下是两种不同的方法:

  1. 允许带小数点的数值
  2. 允许不带小数点的数值

方法1:

$("#approach1").on("keypress keyup blur",function (e) {
   $(this).val($(this).val().replace(/[^0-9\.]/g,''));
      if ((e.which != 46 || $(this).val().indexOf('.') != -1) && (event.which < 48 || event.which > 57)) {
          event.preventDefault();
      }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h2>Numeric with decimal point</h2><br/>
<span>Enter Amount</span>
<input type="text" name="amount" id="approach1">

方法2:

$("#approach2").on("keypress keyup blur",function (event) {    
   $(this).val($(this).val().replace(/[^\d].+/, ""));
    if ((event.which < 48 || event.which > 57)) {
        event.preventDefault();
    }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h2>Numeric without decimal point</h2><br/>
<span>Enter Amount</span>
<input type="text" name="amount" id="approach2">

评论

0赞 eror programs 11/23/2022
你能向我解释一下你用了什么吗?因为我不明白,谢谢你的代码
10赞 user12531388 #30

如果有一个流畅的 OneLiner:

<input type="text" onkeypress="return /[0-9]/i.test(event.key)" >

评论

0赞 code-is-life 5/1/2022
很棒的解决方案,但 onkeypress 没有贬值吗?用 onkeydown 替换它实际上会导致一个问题,它不允许退格?