JavaのString.formatメソッドのJavaScript版を作成してみた

JavaのString.formatメソッドと同様の機能を持つ文字列フォーマット用ライブラリのJavaScript版を作成してみました。基本的にJavaと同じ動作になるようにしていますので、Javaに慣れていて他の書式を覚えるのが面倒な方にオススメです。

format4js - Project Hosting on Google Code

JavaScript用の文字列フォーマットライブラリが欲しくて探してみたのですが、良さそうなものが見当たらなかったため自作してみることに。一通りの変換が動くようになったのでGoogle Codeで公開してみました。

ちなみに、最初は簡単に出来ると思って気軽に作り始めたのですが、真面目に仕様を調べてみると今まで使ったことがないオプションが盛り沢山で予想外に苦労しました。普段は%dと%sくらいしか使わないのですが、実はString.formatって結構高機能なんですね…。

使い方

下記のような形でJavaScriptファイル(format4js.js)を読み込んでください。

<script src="http://format4js.googlecode.com/hg/format4js.js"></script>

jQueryがある場合はjQueryのプラグインとして動作します。

//jQueryプラグインとして利用する場合:
var str = $.format('5+5=%d', 10);

またjQueryなしで単体でも利用できます。

//単体で利用する場合:
var str = mdgw.format('5+5=%d', 10);

基本的にJavaと同じですのでサポートしている書式等はJavaのドキュメント等を御覧ください。

機能制限

実装上の都合で下記の機能制限があります。

  • Localeサポートがありません (Locale.USと仮定)
  • サポートしていない変換
    • %h, %H *1
    • %tN, %TN *2
    • %tZ, %TZ *3
    • %tc, %Tc *4

おまけ

Javascript用の拡張として、下記の書式を追加してみました。変換にJSON.stringifyメソッドを利用しているため、そのままではIE8等では動作しません。別途json2.jsを読み込んでおくか、デバッグ用に限定してご利用下さい。

  • %j JSONとして出力

JavaJavaScriptで同じ変換を行って結果の確認を行っていますが、条件によっては変換結果が違うなどの問題があるかもしれません。もし問題等がありましたらお知らせ頂ければ幸いです。

*1:JavaScriptにhashCodeメソッドが存在しないため

*2:JavaScriptのDateがnanosecondsに非対応のため

*3:別途Timezone DBが必要となるため

*4:別途Timezone DBが必要となるため