В Typescript, как проверить, является ли строка числовой
В Typescript отображается сообщение об ошибке: isNaN принимает только числовые значения
isNaN('9BX46B6A')
и это возвращает false, потому что parseFloat('9BX46B6A')
оценивается как 9
isNaN(parseFloat('9BX46B6A'))
Я все еще могу работать с ошибкой, отображаемой в Visual Studio, но я хотел бы сделать это правильно.
В настоящее время я написал эту измененную функцию -
static isNaNModified = (inputStr: string) => {
var numericRepr = parseFloat(inputStr);
return isNaN(numericRepr) || numericRepr.toString().length != inputStr.length;
}
Ответы
Ответ 1
Преобразовать строку в число можно с помощью Number
, а не parseFloat
.
Number('1234') // 1234
Number('9BX9') // NaN
Вы также можете использовать унарный оператор плюс, если вам нравится сокращение:
+'1234' // 1234
+'9BX9' // NaN
Будьте внимательны при проверке на NaN (операторы ===
и !==
не работают должным образом с NaN
). Использование:
isNaN(maybeNumber) // returns true if NaN, otherwise false
Ответ 2
Я решил это с помощью оператора isNumeric из библиотеки rxjs (импорт rxjs/util/isNumeric
Обновление
import { isNumeric } from 'rxjs/util/isNumeric';
,
,
.
var val = "5700";
if (isNumeric(val)){
alert("it is number !");
}
Ответ 3
function isNumber(value: string | number): boolean
{
return ((value != null) && !isNaN(Number(value.toString())));
}
Ответ 4
Я бы выбрал существующее и уже опробованное решение. Например, это из rxjs в машинописи:
function isNumeric(val: any): val is number | string {
// parseFloat NaNs numeric-cast false positives (null|true|false|"")
// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
// subtraction forces infinities to NaN
// adding 1 corrects loss of precision from parseFloat (#15100)
return !isArray(val) && (val - parseFloat(val) + 1) >= 0;
}
rxjs/isNumeric.ts
Ответ 5
Возможность анализа строки как числа - это вопрос времени выполнения. Typescript не поддерживает этот вариант использования, так как он ориентирован на безопасность во время компиляции (не во время выполнения).