Как проверить цифры (включая числа с плавающей запятой) в JavaScript

Ответ

techfoobar глючит, он не выбирает все параметры, если вы перетаскиваете мышь.

Ответ Серджио интересен, но клонирование и удаление событий, связанных с выпадающим меню, не очень приятно.

Попробуйте этот ответ .

Примечание. Не работает в Firefox, но отлично работает в Safari / Chrome / Opera. (Я не тестировал его на IE)

20
задан Click Upvote 2 December 2009 в 03:46
поделиться

4 ответа

var valid = (value.match(/^-?\d*(\.\d+)?$/));
28
ответ дан 29 November 2019 в 06:07
поделиться

Для этого вам не нужно регулярное выражение! isNaN приведет ваше значение к Number :

var valid = !isNaN(value);

Например:

!isNaN('0'); // true
!isNaN('34.56'); // true
!isNaN('.34'); // true
!isNaN('-34'); // true
!isNaN('foo'); // false
!isNaN('08'); // true

Reluctant Edit (спасибо CMS):

Принуждение взорванного типа, ! IsNaN ('') , ! IsNaN ('') , ! IsNaN ('\ n \ t') и т. Д. Все истинны !

Проверка пробелов + isNaN FTW:

var valid = !/^\s*$/.test(value) && !isNaN(value);

Уф.

55
ответ дан 29 November 2019 в 06:07
поделиться
var valid = (value.match(/^[\d.]+$/));
0
ответ дан 29 November 2019 в 06:07
поделиться

Продолжая использовать подход @Crescent Fresh , некоторое время назад мне пришлось выполнить проверку числа, но мне нужно было проверить, содержит ли переменная число, не зная его типа. , это может быть String , содержащий числовое значение, как в этом случае (я должен был учитывать также экспоненциальную запись и т. д.), объект Number , в основном все, что я не мог делать какие-либо предположения о типах.

И мне пришлось позаботиться о неявном преобразовании типов, например, когда я указал на @Crescent, isNaN было недостаточно для моего случая:

// string values
!isNaN(' ') == true;
!isNaN('\t\t') == true;
!isNaN('') == true;

// boolean values
!isNaN(true) == true;
!isNaN(false) == true;

// etc..

В итоге я написал набор из 30+ модульных тестов , которые вы можете найти и запустить здесь , и следующую функцию, которая прошла все мои тесты:

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}
26
ответ дан 29 November 2019 в 06:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: