Если вы хотите проверить на отправить, вы можете просто использовать parseFloat
, Math.floor
и toString
:
function isValidValue(text) {
return text == (Math.floor(parseFloat(text) * 2)/2).toString();
}
Или вы можете выполнить проверку регулярного выражения со строкой замены, .replace(/[^0-9\.]/g, "")
. Это позволяет только числа и периоды/десятичные точки. К сожалению, это не мешает нескольким десятичным точкам.
Если вы хотите ограничить фактические нажатия клавиш, вам нужно что-то еще. Прикрепите следующую функцию к событию keyup
для вашего текстового поля. Не забывайте использовать return isValidKey(this, event)
вместо того, чтобы просто isValidKey(this, event)
:
function isValidKey(me, evt) {
var charCode = (evt.which) ? evt.which : event.keyCode;
var currValue = me.value;
// disallow decimal point if it is not the first one
if ((charCode == 46 || charCode == 110 || charCode == 190) && currValue.indexOf(".") != -1)
return false;
// disallow non numeric characters
if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57))
return false;
return true;
}
http://jsfiddle.net/SHJsz/
Update: Теперь немного более строгим, но до сих пор не является надежным. Вы все равно можете иметь число с ведущим 0 или начинать с десятичной точки, если пользователь использует backspace или delete для удаления исходных стартовых номеров.
http://jsfiddle.net/SHJsz/1/
Спасибо, это работает для меня .. :) –