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 by using a regular expression filter.
$("#myTextBox").inputFilter(function(value) {
return /^\d*$/.test(value);
});
Некоторые входные фильтры, которые вы можете использовать:
- Целое число значения (положительные и отрицательные):
/^-?\d*$/.test(value)
- Целое число значения (только положительные):
/^\d*$/.test(value)
- Целое число значения (положительные и до определенного предела):
/^\d*$/.test(value) && (value === "" || parseInt(value) <= 500)
- Значения с плавающей точкой (допускается использование
.
и ,
в качестве десятичного разделителя):
/^-?\d*[.,]?\d*$/.test(value)
- Валюта значения (т. Е. Не более двух десятичных знаков):
/^-?\d*[.,]?\d{0,2}$/.test(value)
- Шестнадцатеричные значения:
/^[0-9a-f]*$/i.test(value)
Чистый JavaScript
jQuery на самом деле не нужен для этого, вы можете сделать то же самое с чистым JavaScript. См. этот ответ или попробуйте сами на JSFiddle .
HTML 5
HTML 5 имеет встроенное решение с <input type="number">
(см. спецификацию ), но обратите внимание, что поддержка браузера варьируется:
- Большинство браузеров проверяют ввод только при отправке формы, а не при наборе.
- Большинство мобильных браузеров не поддерживают атрибуты
step
, min
и max
.
- Chrome (версия 71.0.3578.98) по-прежнему позволяет пользователю вводить символы
e
и E
в поле. Также см. этот вопрос .
- Firefox (версия 64.0) и Edge (EdgeHTML версия 17.17134) по-прежнему позволяют пользователю вводить любой текст в поле.
Попробуйте сами на w3schools.com .
Более сложные параметры проверки
Если вы хотите выполнить некоторые другие проверки и проверки, это может быть полезно: