[typescript] Typescript에서 문자열이 숫자인지 확인하는 방법

Typescript에서 isNaN은 숫자 값만 허용한다는 오류를 표시합니다.

isNaN('9BX46B6A')

다음으로 parseFloat('9BX46B6A')평가 되기 때문에 false를 반환 합니다.9

isNaN(parseFloat('9BX46B6A'))

Visual Studio에 오류가 표시되어 계속 실행할 수 있지만 올바른 방법으로 수행하고 싶습니다.

현재이 수정 함수를 작성했습니다.

static isNaNModified = (inputStr: string) => {
    var numericRepr = parseFloat(inputStr);
    return isNaN(numericRepr) || numericRepr.toString().length != inputStr.length;
}



답변

숫자로 된 문자열로 변환하는 방법은 함께 Number하지 parseFloat.

Number('1234') // 1234
Number('9BX9') // NaN

속기를 원하는 경우 단항 더하기 연산자를 사용할 수도 있습니다.

+'1234' // 1234
+'9BX9' // NaN

NaN에 대해 확인할 때주의하십시오 (운영자 ===!==작동하지 않습니다 NaN). 사용하다:

 isNaN(maybeNumber) // returns true if NaN, otherwise false


답변

업데이트 2

이 방법은 더 이상 rxjs v6에서 사용할 수 없습니다

rxjs 라이브러리 의 isNumeric 연산자를 사용하여 해결했습니다 ( rxjs / util / isNumeric 가져 오기

최신 정보

import { isNumeric } from 'rxjs/util/isNumeric';

. . .

var val = "5700";
if (isNumeric(val)){
   alert("it is number !");
}


답변

function isNumber(value: string | number): boolean
{
   return ((value != null) &&
           (value !== '') &&
           !isNaN(Number(value.toString())));
}


답변

간단한 답변 : (공백 및 null을 감시하십시오)

isNaN(+'111') = false;
isNaN(+'111r') = true;
isNaN(+'r') = true;
isNaN(+'') = false;
isNaN(null) = false;   

https://codepen.io/CQCoder/pen/zYGEjxd?editors=1111


답변

기존의 이미 테스트 된 솔루션을 선택합니다. 예를 들어 typescript의 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

rxjs isArray () 함수가없고 간단한 타이핑이있는 경우 :

function isNumeric(val: any): boolean {
  return !(val instanceof Array) && (val - parseFloat(val) + 1) >= 0;
}

항상 사용 사례를 통해 이러한 기능을 테스트해야합니다. 특수한 값 유형이있는 경우이 기능이 솔루션이 아닐 수 있습니다.
여기서 기능을 테스트 할 수 있습니다.

결과는 다음과 같습니다

enum         : CardTypes.Debit   : true
decimal      : 10                : true
hexaDecimal  : 0xf10b            : true
binary       : 0b110100          : true
octal        : 0o410             : true
stringNumber : '10'              : true

string       : 'Hello'           : false
undefined    : undefined         : false
null         : null              : false
function     : () => {}          : false
array        : [80, 85, 75]      : false
turple       : ['Kunal', 2018]   : false
object       : {}                : false

보다시피이 함수를 열거 형과 함께 사용하는 경우주의해야합니다.


답변

대부분의 경우 확인하려는 값은 문자열 또는 숫자이므로 여기에 내가 사용하는 함수가 있습니다.

const isNumber = (n: string | number): boolean =>
    !isNaN(parseFloat(String(n))) && isFinite(Number(n));

코드 및 박스 테스트 .

const willBeTrue = [0.1, '1', '-1', 1, -1, 0, -0, '0', "-0", 2e2, 1e23, 1.1, -0.1, '0.1', '2e2', '1e23', '-0.1', ' 898', '080']

const willBeFalse = ['9BX46B6A', "+''", '', '-0,1', [], '123a', 'a', 'NaN', 1e10000, undefined, null, NaN, Infinity, () => {}]


답변

Number.isFinite()기능을 사용할 수 있습니다 :

Number.isFinite(Infinity);  // false
Number.isFinite(NaN);       // false
Number.isFinite(-Infinity); // false
Number.isFinite('0');       // false
Number.isFinite(null);      // false

Number.isFinite(0);         // true
Number.isFinite(2e64);      // true

참고 : 전역 함수 isFinite()와 후자 사이에는 큰 차이가 Number.isFinite()있습니다. 전자의 경우, 문자열 강제 변환을 수행한다 – 그래서 isFinite('0') === true동안 Number.isFinite('0') === false.

또한 IE에서는 사용할 수 없습니다.