TransWikia.com

元号の1桁の年数(2~9年)を、"全角"で表示させる書き方について

スタック・オーバーフロー Asked by user37282 on January 6, 2022

明けまして、おめでとうございます。

早速質問ですが、
下記のコードは、元号の1桁の年数(2~9年)を”全角”で表示させたものですが、
もっと効率的な書き方がありましたら、ご教示ください。

 <SCRIPT type="text/javascript">
 <!--

   function newYear(){

                       var now = new Date();
                       var Wareki = now.toLocaleDateString("ja-JP-u-ca-japanese", { era: "long", year:"numeric" }).
                                    replace("年", "").
                                    replace(/(^|[^d])1(?=$|[^d])/, '$1元').replace(/(^|[^d])2(?=$|[^d])/, '$12').replace(/(^|[^d])3(?=$|[^d])/, '$13').
                                    replace(/(^|[^d])4(?=$|[^d])/, '$14').replace(/(^|[^d])5(?=$|[^d])/, '$15').replace(/(^|[^d])6(?=$|[^d])/, '$16').
                                    replace(/(^|[^d])7(?=$|[^d])/, '$17').replace(/(^|[^d])8(?=$|[^d])/, '$18').replace(/(^|[^d])9(?=$|[^d])/, '$19').
                                    replace(/u200e/g, "").
                                    replace(" ", "");

                       var txtReki = Wareki + "年  ";
                           document.getElementById('newYear').innerHTML=txtReki;

     window.setTimeout("newYear()",1000);
        }
         window.onload=newYear;

 //-->
 </script>


 <BODY>

<p id='newYear'></p>

One Answer

どのような書き方を「効率的」と考えておられるのかよくわからないのですが、「数字の全角変換」だけを別関数にしておくと、「ほとんど同じコードの繰り返し」は、解消することができます。

function toZenDigits(str) {
  var result = "";
  for( var i = 0; i < str.length; ++i ) {
    var ch = str.charCodeAt(i);
    if( 0x0030 <= ch && ch <= 0x0039 ) {
      ch = ch - 0x0030 + 0xFF10;
    }
    result += String.fromCharCode(ch);
  }
  return result;
}
function newYear(){
  var now = new Date();
  var wareki = now.toLocaleDateString("ja-JP-u-ca-japanese", { era: "long", year:"numeric" })
    .replace("年", "")
    .replace(/(^|[^d])1(?=$|[^d])/, '$1元')
    .replace(/(^|[^d])([2-9])(?=$|[^d])/, function(whole, era, year) {return era + toZenDigits(year);})
    .replace(/u200e/g, "")
    .replace(" ", "");

  var txtReki = wareki + "年  ";
  document.getElementById('newYear').innerHTML=txtReki;

  window.setTimeout("newYear()",1000);
}
window.onload=newYear;
  <span id="newYear"></span>

もうちょっとモダンな書き方、タイプ量が少ない書き方なんかはありそうですが、「ほとんど同じコードの繰り返し」を解消すると言うのとは別の話になるので、この辺にしておきます。

Answered by OOPer on January 6, 2022

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP