Как надежно проверить, является ли строка Javascript числом - PullRequest
0 голосов
/ 04 февраля 2019

Как определить, представляет ли строка число?

Простой и потенциально наивный способ заключается в следующем:

function is_number(my_str) {
  return !isNaN(parseInt(my_str));
}

Однако выше не работает .Обратите внимание, что следующие все возвращают true:

is_number("3, 4, 5");
is_number("3, (123)");
is_number("3, 123)");
is_number("3, (123) (and foo bar)");
is_number("3 apples and 2 oranges");

Проблема в том, что parseInt, кажется, смотрит только на первое слово.Любая идея о более всеобъемлющем решении здесь?

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

Все, что вам нужно, это Number

console.log(Number("3, 4, 5") || false)
console.log(Number("3, (123)") || false)
console.log(Number("3, 123)") || false)
console.log(Number('123') || false)
0 голосов
/ 04 февраля 2019

Вот мое усилие на основе регулярных выражений:

function isNumber (string) {
  return /^-?[0-9]+(?:\.[0-9]+)?(?:[eE][-+]?[0-9]+)?$/.test(string);
}

Включает поддержку начального знака, десятичных разрядов и показателя степени.

Если возвращается true, строку можно преобразовать вчисло, использующее JSON.parse:

function isNumber (string) {
  return /^-?[0-9]+(?:\.[0-9]+)?(?:[eE][-+]?[0-9]+)?$/.test(string);
}

function convertNumber (string) {
  if (isNumber(string)) {
    return JSON.parse(string);
  }
}

[
  '0',
  '1.2',
  '-3.4',
  '5.6789e100',
  '0.1e-100',
  '0.1e+100',
].forEach(string => {
  console.log(`isNumber('${string}'):`, isNumber(string));
  console.log(`typeof convertNumber('${string}'):`, typeof convertNumber(string));
});
0 голосов
/ 04 февраля 2019

Вы можете использовать Число () .parseInt и parseFloat преобразует String в число, если первый символ является числом.Но Number() проверяет все String .Number возвращает NaN, если целая строка не является числом

function is_number(my_str) {
  return !isNaN(Number(my_str)) && Boolean(my_str) || my_str == 0;
}

console.log(is_number("3, 4, 5"));
console.log(is_number("3, (123)"));
console.log(is_number("3, 123)"));
console.log(is_number("3, (123) (and foo bar)"));
console.log(is_number("3 apples and 2 oranges"));
console.log(is_number(null));
console.log(is_number(undefined));
console.log(is_number(0));
console.log(is_number('0'));
...