

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

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

[code]

     <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])/, '$1２').replace(/(^|[^\d])3(?=$|[^\d])/, '$1３').
                                        replace(/(^|[^\d])4(?=$|[^\d])/, '$1４').replace(/(^|[^\d])5(?=$|[^\d])/, '$1５').replace(/(^|[^\d])6(?=$|[^\d])/, '$1６').
                                        replace(/(^|[^\d])7(?=$|[^\d])/, '$1７').replace(/(^|[^\d])8(?=$|[^\d])/, '$1８').replace(/(^|[^\d])9(?=$|[^\d])/, '$1９').
                                        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>
    
[/code]


CC BY-SA 4.0
2020-01-01T13:33:50.730
61926
2020-07-25T00:02:15.187
37282
question
javascript
元号の１桁の年数(２~９年)を、"全角"で表示させる書き方について


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

[code]

    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;
[/code]

[code]

      <span id="newYear"></span>
[/code]

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


CC BY-SA 4.0
2020-01-02T01:57:25.077
61931
2020-01-02T01:57:25.077
13972
61926
answer