スタートページJavascript

文字列の数値化

正規表現の応用です。本来は数値として扱いたいのに、form入力や外部ファイルからの取り込みなどでは、"12" などのように文字列になっている(type が string)になってしまうことがよくあります。ここでは、数値内容の文字列を判定する手段について詳述します。


正規表現による判別

サンプルデータ

var 文字列 = [];
    文字列[0]  = "";        // 空白。数値変換すると0になります。
    文字列[1]  = "0";
    文字列[2]  = "12";
    文字列[3]  = "012";     // 先頭に0がある場合:コードなどに存在します。
    文字列[4]  = "-12";
    文字列[5]  = "+12";
    文字列[6]  = "1.2";
    文字列[7]  = "-1.2";
    文字列[8]  = "+1.2";
    文字列[9]  = "0";       // これ以降、全角数字が混じっています。
    文字列[10] = "12";
    文字列[11] = "012";
    文字列[12] = "12";      // 1は全角、2は半角
    文字列[13] = "1.2";
    文字列[14] = "-1.2";   // -は半角
    文字列[15] = "-1.2";  // -は全角

判別のための正規表現

「文字列[j]」が、「正規表現[i]」の条件に合致しているかどうかを判別するには、
   評価 = 正規表現[i].test(文字列[j]);
とします。合致していれば true, 合致しなければ false を戻します。
   例: "12".test(/^\d*$/) → true,   "-1.2".test(/^\d*$/) → false

数値としての利用

上表でTになった文字列は数値として使うことが考えられます。

全角→半角の処理

全角を半角に変更するには、次の変数関数を定義します。

    var 半角数値 = function(全角数値) {
        var 半角文字列 = 全角数値.replace(/[+, -,  ., 0-9]/g, s => {
            return String.fromCharCode(s.charCodeAt(0) - 0xfee0)
        });
        return Number(半角文字列);  // return 半角文字列 とすれば、"1.2" のような文字列を戻します。
    };

その関数の説明は割愛しますが、通常の正規表演での
    文字列.replace(/0/g, "0");
    文字列.replace(/1/g, "1");
        :
をまとめたものです。全角数字の UTF-16 コードから 0xFEE0 を引くと半角数字の UTF-16 コードになるので、匿名関数 function (s) { ... } は JavaScript の charCodeAt メソッドと fromCharCode メソッドを利用して全角数字を半角数字の文字列に変換します。

そして、戻り値 = 半角数値(全角数値[i]); とすれば、J <= 8 での Number() と同じ結果になります。下表の「+1=?」により、戻り値が数値になっていることがわかります。