MENU

数値データを「万」「億」などの漢字混じり表記に変換するスクリプト。ついでに3ケタごとに「,」

Googleしごと検索が求めている推奨プロパティのひとつに“baseSalary”というのがあるんですが、公式ドキュメントによると

雇用主から提示された実際の基本給(概算額ではない)。

https://developers.google.com/search/docs/data-types/job-posting#basesalary

ということで、要するにこの項目には給与について書くことが求められています。
実際に記述する際の書式(JSON-LD)ではこんな感じ↓

給与額が固定の場合

"baseSalary": {
  "@type": "MonetaryAmount",
  "currency": "JPY",
  "value": {
    "@type": "QuantitativeValue",
    "value": 300000,
    "unitText": "HOUR"
  }
}

給与額が一定の範囲内の場合

"baseSalary": {
  "@type": "MonetaryAmount",
  "currency": "JPY",
  "value": {
    "@type": "QuantitativeValue",
    "minValue": 200000,
    "maxValue": 400000,
    "unitText": "HOUR"
  }
}

違いは、上で“value”とある行が、下では“minValue”“maxValue”に変わっている点。ただどちらにも続けて数値が記述されていて、つまり、ここに給与に関する金額を記入するという決まりになっています。

INDEX

それが何か問題?

実はこの金額、文字が半角数字で、かつ「’」や「”」で囲まれていません。コードを書く人ならお分りになると思うんですが、要するにこれらは数値データということです。

通常、日本で金額を見せるときって「25万円」とか「1,500円」みたいに漢字や記号(カンマ)を加え、読みやすく・伝わりやすく表記しますよね。
ところが、漢字や余計な記号が入っているとコンピューターが計算や比較に利用できないので、Googleしごと検索では金額を純粋な数値データで入力するよう求めているのです。

ふーんそうなんだ、とまあ、そこは納得するしかないんですが、Googleに送るデータはともかく、人間のユーザーが見る募集要項が

給与 年収30000000円

みたいな表記だと…ちょっとピンときません。
ちなみにこれ↑3,000万ですよ。見せる方も見る方も、ぜひピンときたいもんです。

Googleはともかく、人間には人間用の表記したい

という訳で、人間のユーザーにピンときてもらうべく、ユーザーが目にする箇所、つまりウェブページ上では数値データを漢字混じりの表記に変換するスクリプトを書いてみました。
一緒にカンマも入ります。

それが、こちら↓

function yenFormat(_val){
  const _string = String(_val);
  const _length = _string.length;
  const _digits = ['', '万', '億', '兆', '京', '垓'];
  let _result = '';
  let _results = [];
  
  for(i = 0; i < Math.ceil(_length / 4); i++){
    _results[i] = Number(_string.substring(_length - i * 4, _length - (i + 1) * 4));
    if(_results[i] != 0) _result = String(_results[i]).replace(/(\d)(?=(\d\d\d)+$)/g, '$1,') + _digits[i] + _result;
  }
  return _result + '円';
}

関数になっているのでいろんな方法で利用できますが、例えば、要素にクラスを付けて変換するならこんな感じ↓

See the Pen yLYWbxv by PieceDesignInc. (@xyyyyxww) on CodePen.

この記述↓を足すことで、「yenFormat」というクラスがついた要素中の数値を変換することができます。

$('.yenFormat').each(function(){
  $(this).text(yenFormat($(this).text()));
});

他には、フォームで入力された数値を変換して出力するならこんな感じ↓

See the Pen 数値データを漢字混じり表記に変換する by PieceDesignInc. (@xyyyyxww) on CodePen.

お問合わせや求人応募のフォームで使うってことは無さそうですし、利用するならCMS内の記事編集画面? …でもあまり使わないか。

あと、おまけでPHP版も作ってみました↓ WordPressでの利用などに。

<?php
  function yenFormat($val){
    $length = strlen($val);
    $digits = array('', '万', '億', '兆', '京', '垓');
    $results = array();

    for($i = 0; $i < ceil($length / 4); $i++){
      $results[$i] = substr($val, -4, 4);
      $val = substr($val, 0, -4);
      if($results[$i] != '0000') $result = number_format($results[$i]).$digits[$i].$result;
    }
    return $result.'円';
  }
?>

垓までいけます

単位は10の20乗「垓」まで対応しています(日常生活で見たことないけど)。
単位の追加は配列に書き加えるだけなので、簡単に好きなだけ行えるんですが、「垓」の次にあたる10の24乗「し」が表示不可の漢字だったので今回はここまでにしました。
よろしければ、「し」を何とかしつつ、この辺↓を見ながら続きの単位もお好みでどうぞ。

  • URLをコピーしました!
INDEX