Сначала я попытался решить эту проблему с помощью 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/
Другие настройки
- Чтобы разрешить ввод большего количества символов, просто добавьте их в регулярное выражение, которое действует как базовый фильтр кода символов.
- Чтобы реализовать простые контекстные ограничения, посмотрите на текущее содержимое (состояние) поля ввода (oToCheckField.value)
Некоторые вещи, которые вам могут быть интересны:
- Допускается только одна десятичная точка
- Разрешить знак минус, только если он расположен в начале строки. Это позволит использовать отрицательные числа.
Недостатки
- Положение каретки недоступно внутри функции. Это значительно снизило контекстные ограничения, которые вы можете реализовать (например, отсутствие двух одинаковых последовательных символов). Не уверен, как лучше всего получить к нему доступ.
Я знаю, что заголовок требует решений jQuery, но, надеюсь, кому-то это все равно пригодится.
person
Håvard Geithus
schedule
05.05.2014