タイトルのようなことをやりたいとします。

期待する結果


数値, 数値に変換可能な文字列とそれ以外で判定したい。表で書くとこんな感じ。

値(あるいは型)結果
null数値とみなさない
undefined数値とみなさない
""数値とみなさない
" "数値とみなさない
"aaaaa"数値とみなさない
"123"数値とみなす
456数値とみなす

環境


Node.js 13.0.1で試してます。

コード


!Number.isNaNparseIntを組み合わせて判定します。非数(Not a Number)の場合はparseIntNaNが返ってくるのでそいつをさらにNumber.isNaNで判定します。

こういう感じの関数を作成します。

1
2
3
function isNumber(value) {
return !Number.isNaN(parseInt(value));
}

TypeScriptで書くとこんな感じ。

1
2
3
function isNumber(value: any): boolean {
return !Number.isNaN(parseInt(value));
}

最初に記述した一覧を実行すると下記のような結果になります。

1
2
3
4
5
6
7
console.log(isNumber(null));      // false
console.log(isNumber(undefined)); // false
console.log(isNumber(" ")); // false
console.log(isNumber("")); // false
console.log(isNumber("aaaa")); // false
console.log(isNumber("123")); // true
console.log(isNumber(456)); // true

おわり。

参考


(Built-in) way in JavaScript to check if a string is a valid number