sprintf, toLocaleString, 正規表現も駆使!JavaScriptでゼロパディングを極める
JavaScriptで値を先頭にゼロパディングする方法
JavaScriptでゼロパディングを行う方法はいくつかありますが、主に以下の2つの方法が利用されます。
String.prototype.padStart() メソッドを使う
String.prototype.padStart() メソッドは、文字列を指定した長さになるように、左側に指定した文字を繰り返し挿入します。ゼロパディングを行うには、以下の様に使用します。
function padStart(num, length) {
return num.toString().padStart(length, '0');
}
const result = padStart(1, 3); // result は "001" になります
文字列を結合して、必要な桁数になるようにする
以下のコードは、文字列を結合してゼロパディングを行う方法です。
function padStart(num, length) {
let str = num.toString();
while (str.length < length) {
str = '0' + str;
}
return str;
}
const result = padStart(1, 3); // result は "001" になります
ライブラリを使う
lodashなどのライブラリには、ゼロパディングを行うための関数を提供している場合があります。ライブラリを使用する場合は、以下の様に記述することができます。
const _ = require('lodash');
const result = _.padStart(1, 3, '0'); // result は "001" になります
補足
- ゼロパディングを行う目的は、文字列の見た目を揃えたり、数値を比較しやすくするためなどがあります。
- 多くの場合、String.prototype.padStart() メソッドを使うのが最も簡潔でわかりやすい方法です。
- 性能が重要な場合は、文字列を結合してする方法の方が速い場合があります。
String.prototype.padStart() メソッドを使う
function padStart(num, length) {
return num.toString().padStart(length, '0');
}
console.log(padStart(1, 3)); // 001
console.log(padStart(12, 2)); // 12
console.log(padStart(-12, 4)); // -0012
文字列を結合して、必要な桁数になるようにする
function padStart(num, length) {
let str = num.toString();
while (str.length < length) {
str = '0' + str;
}
return str;
}
console.log(padStart(1, 3)); // 001
console.log(padStart(12, 2)); // 12
console.log(padStart(-12, 4)); // -0012
ライブラリを使う
const _ = require('lodash');
console.log(_.padStart(1, 3, '0')); // 001
console.log(_.padStart(12, 2, '0')); // 12
console.log(_.padStart(-12, 4, '0')); // -0012
説明
- 各サンプルコードは、
padStart
という関数を定義しています。この関数は、num
という数値とlength
という長さを受け取り、num
をlength
桁になるようにゼロパディングした文字列を返します。 - 文字列を結合する方法の方が、少し冗長ですが、柔軟性に優れています。
- ライブラリを使う方法は、lodashなどのライブラリを導入する必要があるため、コードが少し長くなりますが、可読性とメンテナンス性が向上します。
これらのサンプルコードを参考に、状況に合わせて適切なゼロパディング方法を選択してください。
JavaScriptでゼロパディングを行うその他の方法
sprintf関数を使う
sprintf 関数は、書式文字列を使用して文字列をフォーマットする関数です。ゼロパディングを行うには、以下の様に使用します。
function padStart(num, length) {
return sprintf('%0' + length + 'd', num);
}
console.log(padStart(1, 3)); // 001
console.log(padStart(12, 2)); // 12
console.log(padStart(-12, 4)); // -0012
Number.prototype.toLocaleString() メソッドを使う
Number.prototype.toLocaleString() メソッドは、数値をロケールに基づいて文字列に変換します。ゼロパディングを行うには、以下の様に使用します。
function padStart(num, length) {
const options = {
minimumIntegerDigits: length
};
return num.toLocaleString('ja-JP', options); // ja-JPは日本のロケール
}
console.log(padStart(1, 3)); // 001
console.log(padStart(12, 2)); // 12
console.log(padStart(-12, 4)); // -0012
正規表現を使う
正規表現を使用して、文字列の先頭にゼロを挿入することができます。以下のコードは、正規表現を使用してゼロパディングを行う方法です。
function padStart(num, length) {
const regex = new RegExp('^(\\d{' + length + '})$');
const match = num.toString().match(regex);
if (match) {
return match[1];
} else {
return '0'.repeat(length) + num;
}
}
console.log(padStart(1, 3)); // 001
console.log(padStart(12, 2)); // 12
console.log(padStart(-12, 4)); // -0012
- sprintf 関数は、C言語の同名の関数と同じように動作します。
- Number.prototype.toLocaleString() メソッドは、ロケールによって異なる書式で文字列を返すことに注意する必要があります。
これらの方法は、それぞれ一長一短があります。状況に合わせて適切な方法を選択してください。
javascript leading-zero zerofill