Все решения, представленные здесь, используют отдельные ключевые события. Это очень подвержено ошибкам, поскольку ввод также может быть получен с использованием copy'n'paste или drag'n'drop. Также некоторые решения ограничивают использование не символьных клавиш, таких как ctrl+c
, Pos1
и т. Д.
Я предлагаю вместо того, чтобы проверять каждое нажатие клавиши, вы проверяете, является ли результат действительным в соответствии с вашими ожиданиями.
var validNumber = new RegExp(/^\d*\.?\d*$/);
var lastValid = document.getElementById("test1").value;
function validateNumber(elem) {
if (validNumber.test(elem.value)) {
lastValid = elem.value;
} else {
elem.value = lastValid;
}
}
<textarea id="test1" oninput="validateNumber(this);" ></textarea>
Событие oninput
запускается сразу после того, как что-то было изменено в текстовой области и перед его обработкой.
Вы можете расширить RegEx до любого числового формата, который вы хотите принять. Это гораздо более легко обслуживаемо и расширяемо, чем проверка нажатия одной клавиши.