Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как в JS проверить что в форму было введено число ( целое или десятичное или десятичное с запятой?)

Carole console Ученик (203), закрыт 8 лет назад
Лучший ответ
Николай Веселуха Высший разум (383378) 8 лет назад
В JavaScript целых чисел нет вообще. Допустимо получить информацию о том, что число имеет целочисленный вид. Но надо понимать, что оно как было представлено в памяти вещественным, так им и останется. То есть под него выделено 8 байт. Есть встроенный объект Number, у которого есть различные методы. Так как объект Number статический, то вызвать их можно явно ссылаясь на него.

Получить представление о том что объект имеет тип Number и по своему виду является целым числом можно с помощью метода Number.isInteger()

var integer = 25; // 8 байт
var real = 2.5; // 8 байт
var string = "250"; // 3 байта
var blablabla = "bla"; // 3 байта

console.log(Number.isInteger(integer)); // true
console.log(Number.isInteger(real)); // false
console.log(Number.isInteger(string)); // false
console.log(Number.isInteger(blablabla)); // false

// Также имеется возможность попытаться привести объект к числу
// Метод Number.parseFloat() пытается преобразовать объект к числу, а если у него это не получается, возвращает NaN (not a number – не число)
// Метод Number.isNaN() возвращает true, если переданный в него параметр представляет из себя NaN

var temp;
temp = Number.parseFloat(integer);
console.log(Number.isNaN(temp)); // false
temp = Number.parseFloat(real);
console.log(Number.isNaN(temp)); // false
temp = Number.parseFloat(string);
console.log(Number.isNaN(temp)); // false
temp = Number.parseFloat(blablabla);
console.log(Number.isNaN(temp)); // true

// Важно знать, что выражение (typeof NaN === 'number') возвращает true!! Такое поведение для проверки не подходит.

// Также имеется возможность попытаться привести объект к числу, которое по виду является целым
// Метод Number.parseInt() для этого способен на многое, в том числе и на "чудеса"

console.log('Всё замечательно');
var f = 25.5;
console.log(Number.parseInt(f, 10));
var sf = "25.5";
console.log(Number.parseInt(sf, 10));
var si = "15";
console.log(Number.parseInt(si, 10));
var ss = "17px";
console.log(Number.parseInt(ss, 10));
console.log('Однако для шестнадцатеричных');
var h = 0xff;
console.log(Number.parseInt(h, 16));
var sh = "FF";
console.log(Number.parseInt(sh, 16));
console.log('Как впрочем и для восьмеричных');
var o = 077;
console.log(Number.parseInt(o, 8));
var so = "077";
console.log(Number.parseInt(so, 8));

https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Number

Учитывая все вышеперечисленные правила и поведения для нужной проверки рекомендую использовать событие onchange, которое наступает при потери фокуса элементом управления. Более сложный механизм проверки можно написать с использование события onkeydown, которое наступает посл нажатия на клавишу, но в этом случае нужен написать метод проверка для первого символа, где могут быть цифры от 0 до 9, знаки плюса и минуса, а также точка. Кроме того знаки и точка во введённой последовательности могут встретиться лишь однажды. Кроме того для клавиши Backspace также следует дать разрешение. И всё-равно это не гарантирует вам успех, так как пользователь может попытаться ввести число содержащие 400 знаков, хотя конечно можете ограничить число вводимых в элемент управления символов.
Остальные ответы
Татьяна Шеховцова Высший разум (531183) 8 лет назад
Составить список всех допустимых символов (в виде строки проще всего) и проверять при вводе, содержится ли введённый символ в списке
Димос Тцарев Гуру (3437) 8 лет назад
https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/parseFloat

см. "Более строгая функция разбора".
или фильтр (White list), как предложила Татьяна.
Похожие вопросы