Как надежно проверить, является ли строка Javascript числом

1

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

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

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 кажется, смотрит только на первое слово. Любая идея о более всеобъемлющем решении здесь?

Теги:
types
numbers

3 ответа

1

Вы можете использовать номер(). 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'));
  • 0
    is_number(null) == true , но обратите внимание is_number(null) == true
  • 0
    @speedplane изменил код, проверь его сейчас.
Показать ещё 2 комментария
0

Все, что вам нужно, это 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

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

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));
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню