Как разрешить только числовые (0-9) в поле ввода HTML с помощью jQuery?

Я создаю веб-страницу, где у меня есть текстовое поле ввода, в котором я хочу разрешить только числовые символы (0,1,2,3,4,5... 9) 0-9.

Как это сделать с помощью jQuery?

826
задан 15 июня '09 в 12:22
источник поделиться
66 ответов
  • 1
  • 2
  • 3

JQuery

Плагин inputFilter из приведенного ниже скрипта позволяет использовать любой тип фильтра ввода для текста <input>, включая различные числовые фильтры. Это будет правильно обрабатывать Copy + Paste, Drag + Drop, сочетания клавиш, операции с контекстным меню, неиспользуемые клавиши и все раскладки клавиатуры. Работает кросс-браузерно и на мобильном устройстве, IE 9+. Обратите внимание, что вы все равно должны выполнить проверку на стороне сервера!

Попробуйте сами на JSFiddle.

// Restricts input for each element in the set of matched elements to the given inputFilter.
(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);
      }
    });
  };
}(jQuery));

Использование:

// Restrict input to digits only by using a regular expression filter.
$("#myTextBox").inputFilter(function(value) {
  return /^\d*$/.test(value);
});

Некоторые регулярные выражения, которые вы можете использовать для фильтрации ввода:

  • /^-?\d*$/ ограничивает ввод целыми числами
  • /^\d*$/ ограничивает ввод беззнаковыми целыми числами
  • /^[0-9a-f]*$/i ограничивает ввод шестнадцатеричными числами
  • /^-?\d*[.,]?\d*$/ ограничивает вход для чисел с плавающей точкой (позволяя одновременно . и , в качестве десятичного разделителя)
  • /^-?\d*[.,]?\d{0,2}$/ ограничивает ввод значений валют (т.е. не более двух знаков после запятой)

Вы также можете использовать входной фильтр, который ограничивает ввод, например, целочисленными значениями до 1500:

$("#myTextBox").inputFilter(function(value) {
  return /^\d*$/.test(value) && (value === "" || parseInt(value) <= 1500);
});

Чистый JavaScript

JQuery на самом деле не нужен для этого, вы можете сделать то же самое с чистым JavaScript.

Попробуйте сами на JSFiddle.

HTML 5

HTML 5 имеет собственное решение с <input type="number"> (см. Спецификацию), но обратите внимание, что поддержка браузера различается. Например, Firefox (начиная с версии 63.0.3) по-прежнему позволяет пользователю вводить текст в поле.

Попробуйте сами на w3schools.com.

Более сложные параметры проверки

Если вы хотите сделать некоторые другие проверочные кусочки, это может быть удобно:

1155
ответ дан 15 июня '09 в 12:26
источник

Вот функция, которую я использую:

// 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();
165
ответ дан 08 марта '10 в 19:57
источник

Инлайн:

<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">
129
ответ дан 05 июня '11 в 6:43
источник

Вы можете просто использовать простое регулярное выражение JavaScript для проверки чисто числовых символов:

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

Возвращает true, если ввод является числовым или ложным, если нет.

или для ключевого кода события, простое использование ниже:

     // 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();
    }
99
ответ дан 17 февр. '10 в 20:55
источник

Вы можете использовать это событие ввода следующим образом:

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

Но что это за привилегия этого кода?

  • Он работает на мобильных браузерах (проблемы с keydown и keyCode имеют проблемы).
  • Он также работает с созданным контентом AJAX, потому что мы используем "on".
  • Лучшая производительность, чем keydown, например, при вставке.
69
ответ дан 14 авг. '15 в 10:27
источник

Использовать функцию JavaScript isNaN,

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

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

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

Update: И здесь хорошая статья, рассказывающая об этом, но использующая jQuery: Ограничение ввода текстовых полей HTML на числовые значения

43
ответ дан 08 марта '10 в 20:00
источник

Короткий и сладкий - даже если это никогда не найдет много внимания после 30+ ответов;)

  $('#number_only').bind('keyup paste', function(){
        this.value = this.value.replace(/[^0-9]/g, '');
  });
41
ответ дан 24 февр. '16 в 5:58
источник
$(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

27
ответ дан 15 июня '09 в 12:26
источник

Я использую это в нашем внутреннем общем файле js. Я просто добавляю класс к любому входу, которому это нужно.

$(".numericOnly").keypress(function (e) {
    if (String.fromCharCode(e.keyCode).match(/[^0-9]/g)) return false;
});
26
ответ дан 14 февр. '11 в 22:47
источник

Более простой для меня -

jQuery('.plan_eff').keyup(function () {     
  this.value = this.value.replace(/[^1-9\.]/g,'');
});
25
ответ дан 02 апр. '12 в 14:20
источник

Почему так сложно? Вам даже не нужен jQuery, потому что есть атрибут шаблона HTML5:

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

Самое интересное, что он вызывает цифровую клавиатуру на мобильных устройствах, что намного лучше, чем использование jQuery.

20
ответ дан 29 окт. '14 в 22:27
источник

Вы можете сделать то же самое, используя это очень простое решение

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

Я ссылался на эту ссылку для решения. Он отлично работает!!!

16
ответ дан 30 июля '14 в 14:35
источник

Атрибут pattern в HTML5 указывает регулярное выражение, которое проверяется на значение элемента.

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

Примечание. Атрибут pattern работает со следующими типами ввода: текстом, поиском, URL-адресом, телефоном, электронной почтой и паролем.

  • [0-9] можно заменить любым условием регулярного выражения.

  • {1,3} он представляет собой минимум 1 и может быть введен максимум 3 цифры.

14
ответ дан 19 янв. '15 в 15:11
источник

Вы можете попробовать HTML5 number:

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

Для несовместимых браузеров есть Modernizr и Webforms2 fallbacks.

13
ответ дан 23 дек. '11 в 1:36
источник

Что-то довольно простое, используя 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)');
11
ответ дан 25 февр. '11 в 2:35
источник

Функция suppressNonNumericInput (событие) {

    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
    }
}
8
ответ дан 12 июля '10 в 23:38
источник

Я пришел к очень хорошему и простому решению, которое не мешает пользователю выбирать текст или скопировать вставку, как это делают другие решения. Стиль 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
8
ответ дан 20 сент. '13 в 0:07
источник

Вы можете использовать эту функцию 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()"/>
8
ответ дан 15 июня '09 в 12:27
источник

Я думаю, что это поможет всем

  $('input.valid-number').bind('keypress', function(e) { 
return ( e.which!=8 && e.which!=0 && (e.which<48 || e.which>57)) ? false : true ;
  })
7
ответ дан 05 апр. '12 в 10:18
источник

Я написал мой, основанный на сообщении @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
ответ дан 09 авг. '11 в 23:35
источник

Вот ответ, который использует jQuery UI Widget factory. Вы можете настроить, какие символы разрешены легко.

$('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;
    }
});
6
ответ дан 25 марта '13 в 19:58
источник

Это кажется нерушимым.

// 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));
});
6
ответ дан 26 июня '13 в 15:52
источник

Вот быстрое решение, которое я создал некоторое время назад. вы можете больше узнать об этом в моей статье:

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
ответ дан 24 мая '12 в 22:51
источник

Я также хотел бы ответить:)

    $('.justNum').keydown(function(event){
        var kc, num, rt = false;
        kc = event.keyCode;
        if(kc == 8 || ((kc > 47 && kc < 58) || (kc > 95 && kc < 106))) rt = true;
        return rt;
    })
    .bind('blur', function(){
        num = parseInt($(this).val());
        num = isNaN(num) ? '' : num;
        if(num && num < 0) num = num*-1;
        $(this).val(num);
    });

Что это... просто цифры.:) Почти он может работать только с "размытием", но...

5
ответ дан 19 янв. '12 в 3:17
источник

Простой способ проверить, что вводимое значение является числовым:

var checknumber = $('#textbox_id').val();

    if(jQuery.isNumeric(checknumber) == false){
        alert('Please enter numeric value');
        $('#special_price').focus();
        return;
    }
5
ответ дан 22 окт. '13 в 9:59
источник

Я хотел немного помочь, и я сделал свою версию, функцию 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);
}

Просто добавьте тег ввода "... input... id =" price "onkeydown =" return onlyNumbers (event) "...", и вы закончили;)

5
ответ дан 07 дек. '10 в 8:05
источник

Вы можете попробовать ввести номер HTML5:

<input type="number" placeholder="enter the number" min="0" max="9">

Этот элемент тега ввода теперь будет принимать значение только от 0 до 9 поскольку атрибут min установлен в 0, а атрибут max - 9.

для получения дополнительной информации о посещении http://www.w3schools.com/html/html_form_input_types.asp

5
ответ дан 14 апр. '15 в 20:05
источник

Вы хотите разрешить вкладку:

$("#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(); 
        }   
    }
});
5
ответ дан 05 окт. '11 в 11:04
источник

Просто нужно применить этот метод в JQuery, и вы можете проверить свое текстовое поле, чтобы просто принять номер.

function IsNumberKeyWithoutDecimal(element) {    
var value = $(element).val();
var regExp = "^\\d+$";
return value.match(regExp); 
}

Попробуйте это решение здесь

5
ответ дан 29 янв. '14 в 8:29
источник

Необходимо убедиться, что у вас есть цифровая клавиатура, и клавиша табуляции тоже работает.

 // 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();
                }
            }
4
ответ дан 16 окт. '09 в 10:13
источник
  • 1
  • 2
  • 3

Другие вопросы по меткам или Задайте вопрос