String.format
2007-04-27


Date / Numberと連携して書式指定子を使えるバージョンをこちらのエントリで公開しました。(2007.5.22)

.NET Framework風の書式指定

はてさて需要があるかはわからんけど、.NET FrameworkのString.Formatメソッドをちょっと真似た実装。

String.format = function() {
        var args = [];
        for(var i = 0; i < arguments.length; i++) args[i] = arguments[i];
        var format = args.shift();
        
        var reg = /\{((\d)|([1-9]\d+))\}/g;
        return format.replace( reg, function() {
                var index = Number( arguments[1] );
                var result = args[ index ];
                if( typeof( result ) == "undefined" )
                        throw new Error( "arguments[ " + index + " ] is undefined." );
                
                return result;
        } );
}
もともと可変パラメータを想定しているから仮引数をおいていないのでコードだけ見てもちょっとわかりづらいかも。

機能概要

使い方、というか仕様はだいたい次のとおり。

ほんとは{0:#,##0}とか{0:yyyy/MM/dd}みたいに書式指定子をサポートしたほうが使いでがあるんだけど、とりあえずの実装ということで。

おまけ

上のようにスタティックメソッドとして実装していると、案外記述が冗長になるので、以下のようにString.prototypeを拡張しちゃうのもアリかと。

String.prototype.format = function() {
        var args = [];
        for(var i = 0; i < arguments.length; i++) args[i] = arguments[i];
        return String.format.apply( String, [ this ].concat( args ) );
}
こうすると、
"{0}, {1}, {2}".format( "zero", "one", "two" ); // → 'zero, one, two'
みたいな書き方ができるのでちょっとだけタイプ量が減る。ほんとにちょっとだけどね。

参考:String.Format メソッド (String, Object[]) (System):(MSDN)

[JavaScript]
[.NET]

コメント(全1件)
コメントをする


記事を書く
powered by ASAHIネット