正規表現の応用です。本来は数値として扱いたいのに、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=?」により、戻り値が数値になっていることがわかります。