Как проверить цифры (включая числа с плавающей запятой) в JavaScript - PullRequest
19 голосов
/ 02 декабря 2009

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

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

Но для цифр, таких как «0,40» или «2,43», это не работает. Как я могу изменить вышеупомянутое выражение exp, чтобы оно совпадало с числами?

Ответы [ 10 ]

52 голосов
/ 02 декабря 2009

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

Тьфу.

26 голосов
/ 02 декабря 2009

Продолжая подход @ 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);
}
24 голосов
/ 02 декабря 2009
var valid = (value.match(/^-?\d*(\.\d+)?$/));
5 голосов
/ 26 мая 2015

Вот моя версия 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('-');
1 голос
/ 11 ноября 2016

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

/[\+]?([\-]?([0-9]{1,})?[\.]?[0-9]{1,})/
0 голосов
/ 10 апреля 2019

Вот регулярное выражение, которое принимает и перехватывает все & только допустимые неотрицательные числа с плавающей запятой (но не обрабатывает экспоненты):

((?:\d+\.\d*)|(?:\d*\.?\d+))

Принимает 1, 1.0, 1., 0.1, .1, но не "." и ничего с более чем одним "."

См. Пример в regex101: https://regex101.com/r/t7eikU/1

0 голосов
/ 21 марта 2019

Вот проверка без каких-либо регулярных выражений с использованием свойства validity самого элемента:

var valid = input_element.validity.valid;
0 голосов
/ 26 марта 2018

Вы можете попробовать мое решение: /^-?\d+(\.?\d+)?$/.test(text)

0 голосов
/ 28 июня 2016
var valid = value.match(/\d+?\.\d+/);
0 голосов
/ 02 декабря 2009
var valid = (value.match(/^[\d.]+$/));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...