Я спершу спробував вирішити це за допомогою jQuery, але я не був радий, що небажані символи (нецифрові), які насправді з’являються у полі введення, перед тим, як їх видалити під час клавіатури.
Шукаючи інших рішень, я знайшов це:
Цілі (негативні)
<script>
function numbersOnly(oToCheckField, oKeyEvent) {
return oKeyEvent.charCode === 0 ||
/\d/.test(String.fromCharCode(oKeyEvent.charCode));
}
</script>
<form name="myForm">
<p>Enter numbers only: <input type="text" name="myInput"
onkeypress="return numbersOnly(this, event);"
onpaste="return false;" /></p>
</form>
Джерело: https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers.onkeypress#Example
Приклад життя: http://jsfiddle.net/u8sZq/
Десяткові бали (негативні)
Щоб дозволити одну десяткову точку, ви можете зробити щось подібне:
<script>
function numbersOnly(oToCheckField, oKeyEvent) {
var s = String.fromCharCode(oKeyEvent.charCode);
var containsDecimalPoint = /\./.test(oToCheckField.value);
return oKeyEvent.charCode === 0 || /\d/.test(s) ||
/\./.test(s) && !containsDecimalPoint;
}
</script>
Джерело: Просто написав це. Здається, працює. Приклад в реальному часі : http://jsfiddle.net/tjBsF/
Інші налаштування
- Щоб дозволити вводити більше символів, просто додайте їх до регулярного виразу, який виступає основним фільтром char-коду.
- Для реалізації простих контекстуальних обмежень подивіться на поточний вміст (стан) поля введення (oToCheckField.value)
Деякі речі, які можуть бути зацікавлені у виконанні:
- Допускається лише одна десяткова крапка
- Дозволити знак мінус, лише якщо він розташований на початку рядка. Це дозволило б отримати негативні числа.
Недоліки
- Положення каретки недоступне всередині функції. Це значно зменшило контекстні обмеження, які ви можете застосувати (наприклад, немає двох рівних послідовних символів). Не впевнений, який найкращий спосіб отримати доступ до нього.
Я знаю, що заголовок запитує рішення jQuery, але, сподіваємось, хтось знайде це корисним у будь-якому випадку.