Webアプリを作っていると、UIの作りが面倒な事がままある。UIライブラリ等を使用すれば良いのだろうが、調べたり、慣れたりするまでには意外と手間が掛かってしまう。
今回はあえてJavascript標準ライブラリのみを使用して、入力した数字を通貨フォーマットに変換してみたいと思う。
試してみるのは、<input type=”number”/>のフィールドに入力中に、横に千円単位で区切られた文字列を表示すること。
ちょっとググって(と言っても、bingなのだが・・・)みると、いくつかの方法が出て来た。その中で、1番使い勝手が良さそうなものをチョイスした。
以下のような感じで入力値を通貨形式に変換できるようだ。
var formattedval = Intl.NumberFormat('ja-JP', {style: 'currency', currency: 'JPY', minimumFractionDigits: 0}).format(val);
パラメータにはロケールと変換オプションを指定する。
ロケールはja-JPやen-US等の文字列。
オプションは
- style
- ‘decimal’ 10進数
- ‘currency’ 通貨表示
- ‘percent’ パーセント
- currency 通貨の種類’JPY’,’USD’など
- minimumFractionDigits 小数点以下の表示桁数
これを使用して、入力した値をリアルタイムで表示するようにコードを書いてみた。
<form>
金額:
<input type="number" style="text-align:right" id="Price"/>
<span style="font-weight:bold" id="FormattedPrice"></span><br/>
</form>
<script>
$(document).ready(
()=>{
$('#Price').on("input",
(e)=>{
if (e.target.value.length != 0) {
var val = parseInt(e.target.value);
var formattedval = Intl.NumberFormat('ja-JP', {style: 'currency', currency: 'JPY', minimumFractionDigits: 0}).format(val);Intl.NumberFormat('ja-JP', {style: 'decimal', minimumFractionDigits: 0}).format(val);
$('#FormattedPrice').text(formattedval);
} else {
$('#FormattedPrice').text('');
}
}
);
}
);
</script>
実行結果はこんな感じ
何かに使えそうなのでメモ。