Code Tips‎ > ‎

JavaScript - 任意の文字数にゼロ(など)埋めをする

ある文字列に対して任意の文字を付加して、一定の文字列長に整形するロジックです。

大まかに3つの方法があります(私の頭の中では)。
(1)最大数の埋める文字の連続を結合して必要な分だけ切り出す
(2)必要な文字長に達するまで足す
(3)足りない分の文字列を作成し追加する

それぞれ具体的なコードとともに説明します。


(1)は昔からよく使われるテクニックです。
考えられる最大の数の文字を毎回追加して、必要な部分だけを切り出します。結果文字列が何文字か決まっていない汎用性の高い関数の作成には向きません。関数を作るまでも無いような個所に適用します。

var str1 = "12";
str1 = ("00000" + str1).slice(-5);
alert(str1);

var str2 = "12";
str2 = ("00" + str2).slice(-2);
alert(str2);


(2)も昔から使われる、分かりやすい原始的なロジックです。
下記の例では、桁数チェックを含めたメインのロジック部分を1行でシンプルにまとめているので、多少恰好よく見えるのではないかと思います。

function lpad(str, len, chr) {
	if (!chr || chr.length == 0) {
		return str;
	} else if (chr.length > 1) {
		chr = chr.charAt(0);
	}

	for (; str.length < len; str = chr + str);
	return str;
}

alert(lpad("12", 1, "0"));
alert(lpad("12", 2, "0"));
alert(lpad("12", 5, "0"));


(3)はトリッキーではありますが面白いと思います。
キモになるのはreturn文の行です。

function lpad(str, len, chr) {
	if (!chr || chr.length < 0) {
		return str;
	} else if (chr.length > 1) {
		chr = chr.charAt(0);
	}

	var chrsLen = (len - str.length);
	if (chrsLen < 0) {
		return str;
	}

	return (Array(chrsLen + 1)).join(chr) + str;
}

alert(lpad("12", 1, "0"));
alert(lpad("12", 2, "0"));
alert(lpad("12", 5, "0"));


※関数名・引数の仕様についてはOracleのLPAD関数とあわせました。しかしprototypeでStringを拡張するのもいいと思います。

String.prototype.lpad = function(chr, len) {
	…
}

(1)~(3)のどれがいいとは言いえません。ケースバイケース・お好みで使い分けるといいと思います。


2011/12/01