[JavaScript] ファイルサイズを数値に直す関数

2 min read

ファイルサイズなどの数値を比較するとき、カンマとか単位とか付いていると非常に面倒です。
こんな感じ。

6B
102KB
2,500KB
800MB
2GB
1TB

上記のような文字列にある程度対応できるような関数を作ってみた。

ファイルサイズ変換関数

function fileSizeFormat(size) {
  var s   = size.split(",").join("");
  var suf = ( (s.match(/(B|KB|MB|GB|TB)$/gi)||[])[0] || "B" ).toUpperCase();
  var num = parseFloat(s.match(new RegExp(/^[0-9]+(\.[0-9]+)?/))[0]);
  var mul = 1024;

  switch (suf) {
  case "B":
    return num;
  case "KB":
    return num _ Math.pow(mul, 1);
  case "MB":
    return num _ Math.pow(mul, 2);
  case "GB":
    return num _ Math.pow(mul, 3);
  case "TB":
    return num _ Math.pow(mul, 4);
  }
}

変な単位が来たときは B(バイト)にしています。あと、単位がない場合も B(バイト)とされます。

「SI 接頭辞」や「2 進接頭辞」に応じて10241000などに変えてください。
また、ペタバイト(PB)・エクサバイト(EB)…など増やしていく場合は、それぞれ正規表現とSwitchに追加していってください。

使い方

var size = '2,048KB';
fileSizeFormat(size);
// => 2097152