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

前端 未结 30 1821
一生所求
一生所求 2020-11-21 05:38

I am creating a web page where I have an input text field in which I want to allow only numeric characters like (0,1,2,3,4,5...9) 0-9.

How can I do this using jQuery

相关标签:
30条回答
  • 2020-11-21 06:06

    Here is a quick solution I created some time ago. you can read more about it in my article:

    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);
    });
    
    0 讨论(0)
  • You can do the same by using this very simple solution

    $("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" />

    I referred to this link for the solution. It works perfectly!!!

    0 讨论(0)
  • 2020-11-21 06:10

    Note: This is an updated answer. Comments below refer to an old version which messed around with keycodes.

    jQuery

    Try it yourself on JSFiddle.

    There is no native jQuery implementation for this, but you can filter the input values of a text <input> with the following inputFilter plugin (supports Copy+Paste, Drag+Drop, keyboard shortcuts, context menu operations, non-typeable keys, the caret position, different keyboard layouts, and all browsers since IE 9):

    // Restricts input for the set of matched elements to the given inputFilter function.
    (function($) {
      $.fn.inputFilter = function(inputFilter) {
        return this.on("input keydown keyup mousedown mouseup select contextmenu drop", function() {
          if (inputFilter(this.value)) {
            this.oldValue = this.value;
            this.oldSelectionStart = this.selectionStart;
            this.oldSelectionEnd = this.selectionEnd;
          } else if (this.hasOwnProperty("oldValue")) {
            this.value = this.oldValue;
            this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
          } else {
            this.value = "";
          }
        });
      };
    }(jQuery));
    

    You can now use the inputFilter plugin to install an input filter:

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

    See the JSFiddle demo for more input filter examples. Also note that you still must do server side validation!

    Pure JavaScript (without jQuery)

    jQuery isn't actually needed for this, you can do the same thing with pure JavaScript as well. See this answer.

    HTML 5

    HTML 5 has a native solution with <input type="number"> (see the specification), but note that browser support varies:

    • Most browsers will only validate the input when submitting the form, and not when typing.
    • Most mobile browsers don't support the step, min and max attributes.
    • Chrome (version 71.0.3578.98) still allows the user to enter the characters e and E into the field. Also see this question.
    • Firefox (version 64.0) and Edge (EdgeHTML version 17.17134) still allow the user to enter any text into the field.

    Try it yourself on w3schools.com.

    0 讨论(0)
  • 2020-11-21 06:10

    I use this in our internal common js file. I just add the class to any input that needs this behavior.

    $(".numericOnly").keypress(function (e) {
        if (String.fromCharCode(e.keyCode).match(/[^0-9]/g)) return false;
    });
    
    0 讨论(0)
  • 2020-11-21 06:10

    Something fairly simple using 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)');
    
    0 讨论(0)
  • 2020-11-21 06:10

    I came to a very good and simple solution that doesn't prevent the user from selecting text or copy pasting as other solutions do. jQuery style :)

    $("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 讨论(0)
提交回复
热议问题