本記事は現在、執筆中です。閲覧しにくい箇所や今後変更になる内容を含みます。

js、jqueryで数値かどうか判定・チェック・確認

数字・数値判定に使えそうな関数・メソッド いろいろ

非数値チェックのisNaNを"!isNaN"にするとfalseを非数値にできますのでtrueが数値になります。

今回、期待する結果。

    今回は数字を求めているので、数値型および文字列型の整数(正の整数・負の整数)・少数(正の少数・負の少数)でtrueを返すことを目指します。

    数値型・整数であれば、Number.isInteger()で判別できますね。

      数値型および文字列型の整数(正の整数・負の整数)・少数(正の少数・負の少数)であれば、!isNaNが候補に入りますが以下の通り工夫は必要です。

        !isNaN(val)だけでは、true、false、null、空配列もtrue判定されるので対策が必要です。絶対にtrue、false、null、空配列が評価対象にならないならこれでもいけそうです。

          数値型・文字列型の整数(0を除く)でtrueとなります。0を除く判定ならこれでいけます。

            できました。数値型・文字列型の整数(0を含む)でtrueとなります。

              こちらも数値型・文字列型の整数(0を含む)でtrueとなります。式が長いですが。

              数値型および文字列型の整数(正の整数・負の整数)・少数(正の少数・負の少数)を、parseIntで攻めてみる。

                parseIntだけだと0と配列、数字文字列混在への対応が必要となる。

                  0と数字文字混在が残ってしまう。

                    0を含めるとこうなる。数字文字混在はいまだ残る。

                      結局!isNaN登場。!Array.isArray(val)はいらなくなるから上と同じになりました。

                      これも使えるかな。0を含めない整数・少数(数値型・文字列型問わず)

                          正規表現でもいけます。さらに条件を絞ることも。

                            今回目指していた状態です。

                              正の整数・正の少数のみtrue。

                                正の整数のみtrue。

                                !isNaNと正規表現どちらが早い?

                                10000回の評価を10回施行した結果。

                                !isNaN

                                1 : 4.800000ms
                                2 : 6.100000ms
                                3 : 11.700000ms
                                4 : 4.200000ms
                                5 : 5.100000ms
                                6 : 4.800000ms
                                7 : 3.800000ms
                                8 : 4.000000ms
                                9 : 13.100000ms
                                10 : 38.100000ms

                                regex

                                0 : 7.500000ms
                                1 : 3.900000ms
                                2 : 5.200000ms
                                3 : 2.700000ms
                                4 : 2.400000ms
                                5 : 3.600000ms
                                6 : 2.400000ms
                                7 : 2.300000ms
                                8 : 2.000000ms
                                9 : 2.500000ms

                                傾向としては正規表現の方が早そうです。

                                ※Javascriptはユーザー環境で働いていますので、実測値は環境により大きく異なります。今回の計測結果は筆者のPC環境で実行した結果です。

                                ちなみに普通にifすると。。。こんな感じになります^^