(Встроенный) способ в JavaScript, чтобы проверить, является ли строка допустимым числом

Извлечь из документации python

Класс имеет пространство имен, реализуемое объектом словаря. Ссылки на атрибуты класса переводится в поисковые запросы в этом словаре, например, C.x переводится в C .__ dict __ ["x"] (хотя для классов нового стиля, в частности, существует несколько крючков, которые позволяют использовать другие способы определения атрибутов). Когда имя атрибута не найдено там, поиск атрибутов продолжается в базовых классах

blockquote>

. Другими словами, __dict__ содержит только «локальные» атрибуты класса, атрибуты суперкласса хранятся в суперкласс __dict __.

Итак, вы можете использовать __class__.__dict__.iteritems() для извлечения только атрибутов класса.

980
задан Alexander Abakumov 31 August 2018 в 17:47
поделиться

5 ответов

Чтобы проверить, является ли переменная (включая строку) числом, проверьте, не является ли это число:

Это работает независимо от того, является ли переменное содержание строкой или числом.

isNaN(num)         // returns true if the variable does NOT contain a valid number

Примеры

isNaN(123)         // false
isNaN('123')       // false
isNaN('1e10000')   // false (This translates to Infinity, which is a number)
isNaN('foo')       // true
isNaN('10px')      // true

, Конечно, можно инвертировать это, если Вы должны. Например, для реализации IsNumeric пример Вы дали:

function isNumeric(num){
  return !isNaN(num)
}

Для преобразования строки, содержащей число в число:

Только работы, если строка [только 1 119] содержат цифровые символы, еще она возвращается NaN.

+num               // returns the numeric value of the string, or NaN 
                   // if the string isn't purely numeric characters

Примеры

+'12'              // 12
+'12.'             // 12
+'12..'            // Nan
+'.12'             // 0.12
+'..12'            // Nan
+'foo'             // NaN
+'12px'            // NaN

Для преобразования строки свободно в номер

, Полезный для преобразования '12 пкс' к 12, например:

parseInt(num)      // extracts a numeric value from the 
                   // start of the string, or NaN.

Примеры

parseInt('12')     // 12
parseInt('aaa')    // NaN
parseInt('12px')   // 12
parseInt('foo2')   // NaN      These last two may be different
parseInt('12a5')   // 12       from what you expected to see. 

Плавания

Принимают во внимание, что, в отличие от этого +num, parseInt (поскольку имя предлагает) преобразует плавание в целое число путем обрубания всего после десятичной точки (если Вы захотите использовать parseInt() из-за [1 120] это поведение, Вы - вероятно, более обеспеченное использование другого метода вместо этого ):

+'12.345'          // 12.345
parseInt(12.345)   // 12
parseInt('12.345') // 12

Пустые строки

Пустые строки могут быть немного парадоксальными. +num преобразовывает пустые строки для обнуления, и isNaN() принимает то же:

+''                // 0
isNaN('')          // false

, Но parseInt() не соглашается:

parseInt('')       // NaN
1989
ответ дан ZwoRmi 31 August 2018 в 17:47
поделиться

parseInt (), но знать, что эта функция несколько отличается в том смысле, что это, например, возвращается 100 для parseInt ("100 пкс").

5
ответ дан liggett78 31 August 2018 в 17:47
поделиться

Попробуйте функция isNan :

isNaN () функция определяет, является ли значение недопустимым числом (Не-число).

Эта функция возвращает true, если значение приравнивается к NaN. Иначе это возвращает false.

Эта функция отличается от Числа, конкретного Number.isNaN () метод.

  глобальный isNaN () функция, преобразовывает протестированное значение в Число, затем тестирует его.

Number.isNan () не преобразовывает значения в Число и не возвратит true ни для какого значения, которое не имеет Числа типа...

21
ответ дан tanguy_k 31 August 2018 в 17:47
поделиться

И Вы могли пойти RegExp-путь:

var num = "987238";

if(num.match(/^-{0,1}\d+$/)){
  //valid integer (positive or negative)
}else if(num.match(/^\d+\.\d+$/)){
  //valid float
}else{
  //not valid number
}
45
ответ дан Clay 31 August 2018 в 17:47
поделиться

2019: Включая ES3 ES6 и Примеры TypeScript

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

машинописный текст ES3

var isNumeric = function(num){
    return (typeof(num) === 'number' || typeof(num) === "string" && num.trim() !== '') && !isNaN(num);  
}

ES6

const isNumeric = (num) => (typeof(num) === 'number' || typeof(num) === "string" && num.trim() !== '') && !isNaN(num);

const isNumeric = (num: any) => (typeof(num) === 'number' || typeof(num) === "string" && num.trim() !== '') && !isNaN(num as number);

Это кажется довольно простым и покрывает все основания, которые я видел на многих других сообщениях и продумал сам:

// Positive Cases
console.log(0, isNumeric(0) === true);
console.log(1, isNumeric(1) === true);
console.log(1234567890, isNumeric(1234567890) === true);
console.log('1234567890', isNumeric('1234567890') === true);
console.log('0', isNumeric('0') === true);
console.log('1', isNumeric('1') === true);
console.log('1.1', isNumeric('1.1') === true);
console.log('-1', isNumeric('-1') === true);
console.log('-1.2354', isNumeric('-1.2354') === true);
console.log('-1234567890', isNumeric('-1234567890') === true);
console.log(-1, isNumeric(-1) === true);
console.log(-32.1, isNumeric(-32.1) === true);
console.log('0x1', isNumeric('0x1') === true);  // Valid number in hex
// Negative Cases
console.log(true, isNumeric(true) === false);
console.log(false, isNumeric(false) === false);
console.log('1..1', isNumeric('1..1') === false);
console.log('1,1', isNumeric('1,1') === false);
console.log('-32.1.12', isNumeric('-32.1.12') === false);
console.log('[blank]', isNumeric('') === false);
console.log('[spaces]', isNumeric('   ') === false);
console.log('null', isNumeric(null) === false);
console.log('undefined', isNumeric(undefined) === false);
console.log([], isNumeric([]) === false);
console.log('NaN', isNumeric(NaN) === false);

можно также попробовать собственное isNumeric функция и просто мимо в этих вариантах использования и просканировать для "истинного" для всех них.

Или, для наблюдения значений, что каждый возврат:

Results of each test against <code>isNumeric()</code>

1
ответ дан 19 December 2019 в 20:19
поделиться
Другие вопросы по тегам:

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