2

Hi all. This is somewhat the equivalent of .NET String.Format(String, Args);

Usages:

'Hello {0}'.format('DaniWeb!');

String.format('{0} {1} {2}', 'Hi', 'Again', 'Good Fella');

String.format('Hello {prefix} {name}', { prefix: 'Sr.', name: 'HeyHeyHey'});

I know there's lots of String.formats out there(some simpler and some more complex), but this is the one i've been using for the past years and it works really well for me.

Remarks: I didn't write this from scratch, couple years ago I put together a couple of simpler sinnepts to make this one. But I couldn't find the sources to give the deserved credits.

Hope it may be helpful.

Cheers!

Votes + Comments
very nice!
if ( !('format' in String.prototype)) {
	
	String.prototype.format = function () {
		return String.format(this, arguments.length == 1 ? arguments[0] : arguments);
	};

	String.format = function (source, params) {
		var _toString = function (obj, format) {
			var ctor = function (o) {
				if (typeof o == 'number')
					return Number;
				else if (typeof o == 'boolean')
					return Boolean;
				else if (typeof o == 'string')
					return String;
				else
					return o.constructor;
			} (obj);
			var proto = ctor.prototype;
			var formatter = typeof obj != 'string' ? proto ? proto.format || proto.toString : obj.format || obj.toString : obj.toString;
			if (formatter)
				if (typeof format == 'undefined' || format == "")
					return formatter.call(obj);
				else
					return formatter.call(obj, format);
			else
				return "";
		};
		if (arguments.length == 1)
			return function () {
				return String.format.apply(null, [source].concat(Array.prototype.slice.call(arguments, 0)));
			};
		if (arguments.length == 2 && typeof params != 'object' && typeof params != 'array')
			params = [params];
		if (arguments.length > 2)
			params = Array.prototype.slice.call(arguments, 1);
		source = source.replace(/\{\{|\}\}|\{([^}: ]+?)(?::([^}]*?))?\}/g, function (match, num, format) {
			if (match == "{{") return "{";
			if (match == "}}") return "}";
			if (typeof params[num] != 'undefined' && params[num] !== null) {
				return _toString(params[num], format);
			} else {
				return "";
			}
		});
		return source;
	};
}
1
Contributor
0
Replies
25
Views
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.