文字列が有効な数値かどうかを確認するにはどうすればよいですか? 質問する

文字列が有効な数値かどうかを確認するにはどうすればよいですか? 質問する

古い VB6 関数と同じ概念空間に何かがあることを期待していますIsNumeric()

ベストアンサー1

2020 年 10 月 2 日:多くの基本的なアプローチには、ここでの回答の多くが考慮していない微妙なバグ (空白、暗黙の部分解析、基数、配列の強制など) がたくさんあることに注意してください。次の実装はうまくいくかもしれませんが、小数点 " ." 以外の数値区切り文字には対応していないことに注意してください。

function isNumeric(str) {
  if (typeof str != "string") return false // we only process strings!  
  return !isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...
         !isNaN(parseFloat(str)) // ...and ensure strings of whitespace fail
}

変数 (文字列を含む) が数値かどうかを確認するには、数値ではないかどうかを確認します。

これは、変数の内容が文字列か数値かに関係なく機能します。

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
isNaN('')          // false
isNaN(' ')         // false
isNaN(false)       // false

もちろん、必要に応じてこれを否定することもできます。たとえば、IsNumeric示した例を実装するには、次のようにします。

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

数値を含む文字列を数値に変換するには:

文字列に数字のみ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

文字列を大まかに数値に変換する

たとえば、「12px」を 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 three may
parseInt('12a5')   // 12       be different from what
parseInt('0x10')   // 16       you expected to see.

フロート

+numとは異なり、はparseInt(名前が示すように)小数点以下のすべてを切り捨てて浮動小数点数を整数に変換することに注意してください(この動作parseInt() のため、 を使用する場合は、代わりに別の方法を使った方が良いでしょう):

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

空の文字列

空の文字列は、少し直感に反するかもしれません。+num空の文字列またはスペースを含む文字列をゼロに変換し、isNaN()同じことを想定します。

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

しかし、parseInt()同意しない:

parseInt('')       // NaN
parseInt('   ')    // NaN

おすすめ記事