《 1:00 PM 公開/更新》
桁数の多い数値を掲載する場合は、3桁ごとにカンマ記号を使って区切ると読みやすくなります。しかし、プログラム中で数値として取り扱いたい場合は、カンマ記号が含まれていると困ります。そこで、「カンマ記号の含まれない数値」と「3桁ごとにカンマ記号で区切った数字」とを相互に変換するJavaScriptを作成してみました。
桁数の多い数値を掲載する場合は、3桁ごとにカンマ記号を使って区切ると読みやすくなります。
しかし、プログラム中で数値として取り扱いたい場合は、カンマ記号が含まれていると困ります。
そこで、「カンマ記号の含まれない数値」と「3桁ごとにカンマ記号で区切った数字」とを相互に変換するJavaScriptを用意しておくと便利かも知れません。
プログラムが出力した数値には、人間が読みやすいように「3桁ごとにカンマ記号を付加」し、
人間が入力した「3桁ごとにカンマ記号が打たれた数字」は、プログラムが数値として扱えるように「カンマ記号を取り除いた数値」に変換します。
上記のサンプルでは、入力欄に適当な桁数の数値を入れた後、「カンマ記号の挿入・除外」ボタンを押すと、
ます。
数字・カンマ・マイナス記号以外の文字は問答無用で全削除する仕様です。
なお、ここでは小数点が入っている数値は考慮していないので、(小数点も含めて削除してしまうため)正しく区切れません。(^_^;)
ここでは、以下の3つの関数を作成しています。
JavaScriptソースは以下の通りです。
対象の数字文字列を引数に与えると、3桁ごとに区切ってカンマ記号を加えて返す関数です。
なお、与えられた数値がマイナスの場合には、「先頭のマイナス記号を除いた数値」だけを抜き出して3桁ごとに区切った上で、最後に「先頭にマイナス記号を追加」しています。(※そうしないと、マイナス記号も桁に含めてカンマ区切りにしてしまいますから「-123456」が「-,123,456」になってしまうためです。)
JavaScriptソース
function addComma( targetNum ) { var retStr = ""; // 返す文字列の格納用 var isMinus = false; // マイナスかどうかを示すフラグ // 先頭がマイナス記号かどうかを調べる if( targetNum.charAt(0) == '-' ) { isMinus = true; // マイナスフラグを立てる targetNum = targetNum.replace(/-/g, ""); // マイナス記号を消す } var figLength = targetNum.length; // 対象の文字数(=桁数)を数える var figCount = 0; // 処理桁数カウンタ // 最後の文字(=右側の桁)から順にループ for( var i=figLength-1 ; i>=0 ; i-- ) { retStr = targetNum.charAt(i) + retStr; // 現在の数字を左に加える figCount++; // 桁数カウンタを進める if( ( figCount % 3 == 0 ) && ( i > 0 ) ) { // 3桁目に到達 かつ 残り文字数がまだあれば、カンマ記号を左に追加 retStr = "," + retStr; } } // マイナス記号を消していれば再度加える if( isMinus ) { retStr = "-" + retStr; } return retStr; }
6行目や16行目で使っているcharAtメソッドは、文字列中の指定位置の1文字を取り出すメソッドです。先頭は0なので、.charAt(0)
が1文字目、.charAt(1)
が2文字目、.charAt(2)
が3文字目……のようになります。
マイナス記号に関して回りくどい処理をしているのは、マイナス記号の存在を「3桁区切り」に含めてしまわないようにするためです。
もうちょっとスマートなコーディング方法があるような気もしますが。(^_^;;;
対象の文字列を引数に与えると、カンマ記号だけを取り除いて返す関数です。
JavaScriptソース
function delComma( targetNum ) { return targetNum.replace(/,/g, ""); // カンマ記号だけを消す }
わざわざ関数にするまでもないですね。(^_^;)
正規表現を使って、文字列中に含まれるカンマ記号「,」を一括削除しているだけです。ここでは、与えられた文字列が数値として適切かどうかは一切考慮していません。
上記で作成した addComma関数か delComma関数か、どちらを実行するのかをチェックする関数です。
引数には、対象文字列が格納されている入力欄(input要素)のid名を指定します。
JavaScriptソース
function checkComma( targetId ) { // 対象文字列を得る var targetString = document.getElementById( targetId ).value; // 数字とカンマとマイナス記号以外は削除する targetString = targetString.replace(/[^\d,-]/g, ""); if( targetString.indexOf(",") == -1 ) { // カンマ記号がなければ、カンマで区切る targetString = addComma( targetString ); } else { // カンマ記号があれば、カンマ記号を除外する targetString = delComma( targetString ); } // 変換結果を書き戻す document.getElementById( targetId ).value = targetString; }
ここで実行していることは、
……という処理です。
正規表現を使って特定の文字以外を削除する方法に関しては「入力された文字列に含まれる空白文字を削除する方法」などもご参照下さい。[^\d,-]
という記述が、数字(\d)とカンマ(,)とマイナス(-)以外という意味です。
(ここでは、文字列の先頭以外の場所にマイナス記号があっても許容してしまいますが、3桁ごとにカンマ区切りを実行するaddComma関数内でマイナス記号を一時的に削除する過程で余計なマイナス記号も削除されるので、あまり問題にはなりません。)
なお、HTMLは以下のように記述しています。
HTMLソース
<input type="text" id="SampleNumberForm" value=""> <input type="button" value="カンマ記号の挿入・除外" onclick="checkComma('SampleNumberForm');">
input要素で入力欄を作って、id名に「SampleNumberForm」と付けています。
さらに、input要素で作ったボタンで、checkComma関数を実行させています。(引数には、上記で付けたid名「SampleNumberForm」を指定)
実際に活用する際には、もうちょっとエラー処理を追加した方が良いと思いますが。^^;
あと、「小数点が含まれる場合の処理」は加える必要があるでしょうね。(^_^;) それはちょっと面倒だったので省きました。(^_^;;;
たぶん、前処理として「小数点を見つけたらそれより右側を一時的に分離しておいて、整数部分を3桁ごとにカンマ区切りした後で、小数点とその右側を再度結合する」というような処理で良いかな、と思います。(小数点以下ってカンマでは区切りませんよね?)
()
(前の記事) « データの受け渡しができるサブウインドウ(モーダルダイアログ)を開く方法
前後のJavaScript TIPS
< 旧 / 新 >
(次の記事) タブや全角スペースと半角スペースを相互変換する方法 »
▼このページに関連しそうな記事が約8本くらい自動表示されています。(たぶん)