Подтвердить что ты не робот

Как проверить цифры (включая поплавки) в javascript

В настоящее время я использую этот reg exp:

var valid = (value.match(/^\d+$/));

Но для цифр типа "0.40" или "2.43" это не работает. Как я могу изменить этот reg exp выше, чтобы соответствовать поплавкам?

4b9b3361

Ответ 1

var valid = (value.match(/^-?\d*(\.\d+)?$/));

Ответ 2

Вам не нужно регулярное выражение для этого! 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

Нежелательное редактирование (спасибо CMS):

Принудительное принуждение типа !isNaN(''), !isNaN(' '), !isNaN('\n\t') и т.д. все true!

Тест пробелов + isNaN FTW:

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

Тьфу.

Ответ 3

Продолжая с помощью @Crescent Fresh, некоторое время назад мне приходилось выполнять проверку числа, но мне нужно было проверить, содержит ли переменная число, не зная его type, это может быть 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);
}

Ответ 4

Здесь моя версия RegExp.

var n = /^[+-]?((\.\d+)|(\d+(\.\d+)?))$/;

Match

n.test('3');
n.test('3.0');
n.test('0.3');
n.test('.3');
n.test('+3');
n.test('+3.0');
n.test('+0.3');
n.test('+.3');
n.test('-3');
n.test('-3.0');
n.test('-0.3');
n.test('-.3');

Не соответствуют

n.test('');
n.test('+');
n.test('-');

Ответ 5

Это то, что я использую

/[\+]?([\-]?([0-9]{1,})?[\.]?[0-9]{1,})/

Ответ 6

var valid = (value.match(/^[\d.]+$/));

Ответ 7

var valid = value.match(/\ d +?.\d +/);