いつもお世話になっております。
現在、「縦書き」と「横書き」に対応したWebサイトを作っており、
横書きのときは「アラビア数字(1,2,3...)」を、縦書きのときは「和製漢字(一,二,三...)」に切り替えようと思考錯誤しております。
具体的には、変換したい数字にはあらかじめ手動で<span class=""></span>タグを適用させ、
その要素をjavascriptかphpで拾うことにより処理ができないかと考えています。
和製漢字は複雑で、すべての数字を適応させることは難しいです。
また、すべての数字を正規の和製漢数字として対応させることも不可能に近いと考えているため、全角数字の0〜9までを、そして
半角数字は0〜31までを対応させたいと考えております。
具体的な表記やHTMLでのマークアップ方法は以下になります。
/-------------------------------------------- 例 ------------------------------------------------------/
【和製漢字の表記】
〝横書きの場合〟: 2018年7月17日 → 2018年7月17日(変更なし)
〟
縦 2 二 7 七
書 0 〇 月 月
き 1 → 一 1 → 十
の 8 八 7 七
場 年 年 日 日
合
〝
【やりたいこと】
2018年(全角) → 二〇一八年
7月(全角)17日(半角) → 七月 十七日
<!-- htmlのマークアップ --> <span class="num_zen">2</span><span class="num_zen">0</span><span class="num_zen">1</span><span class="num_zen">8</span>年 <span class="num_zen">7</span>月<span class="num_han">27</span>日 <!-- 数字が2文字以上並ぶ場合、半角数字を用います。 -->
【半角・全角数字の場合】
|0|1|2|3|4|5|6|7|8|9|
|:--|:--:|--:|:--|:--:|--:|:--|:--:|--:|
|〇|一|二|三|四|五|六|七|八|九|
【半角数字の場合】
|10|11|12|13|14|15|16|17|18|19|
|:--|:--:|--:|:--|:--:|--:|:--|:--:|--:|
|十|十一|十二|十三|十四|十五|十六|十七|十八|十九|
|20|21|22|23|24|25|26|27|28|29|
|:--|:--:|--:|:--|:--:|--:|:--|:--:|--:|
|二〇|二一|二二|二三|二四|二五|二六|二七|二八|二九|
30 | 31 | - |
---|---|---|
三〇 | 三一 |
表を作成中に「半角数字と全角数字は分ける必要がないのではないか?」とも思ったのですが、
例えば「1歩1歩」や「1つ1つ」という言葉のように、横書きのときには全角数字を用いて余韻を持たせたい場合があります。
また、もし31以上の数字を漢数字にしたい場合は全角数字を用いることで対応させます。
【例:100万円(半角)ではなく100万円(全角)とすることで、縦書きのときは一〇〇万円とします。】
arrayを用いれば上手く実装できそう…とは思うのですが、当方のベースとなる知識は浅はかなものです。
なので、具体的なコードを用いてご指摘いただけるととても嬉しいです。
0〜9までの全角数字、そして0〜31までの半角数字を和製漢字として適用させる方法をどなたか教えていただけると嬉しいです。
**追記
いただいた回答を元に現状を更新します。
yambejpさんが回答していただいたコードで無事に作動するようになりました。
現在は縦書きから横書きにしたときに、データを元に戻したいと考えています。
また、同じクラスの要素でまとめているため、それぞれに適用させるためeachで囲んでみましたが上手くいきませんでした。
適切な方法がありましたらご教授ください。
var henkanhyo={"0":"〇","1":"一","2":"二","3":"三","4":"四","5":"五","6":"六","7":"七","8":"八","9":"九","0":"〇","1":"一","2":"二","3":"三","4":"四","5":"五","6":"六","7":"七","8":"八","9":"九",}; function henka(){ var v=$(".tategaki").text(); v.each(function() { v=v.replace(/1(?=[1-9])|1(?=[1-9])|10|10/g,"十").replace(/[0-9]|[0-9]/g,function(x){return henkanhyo[x]}); $(".tategaki").text(v); }); } <!-- html --> <div class="tategaki">2018年7月17日ー11月28日:2018年3月15日ー12月25日:2108年3月31日</div> <div class="tategaki">2018年12月11日</div> <!-- 2つとも、同じクラスでそれぞれに適用させたいと考えています。 -->
参考にしたサイト
・javascriptで数字を漢数字に変換する方法|正規表現で日付を年月日に分ける - TECHHOT
・JavaScriptで曜日ごとに文言の表示を変更する方法
回答1件
あなたの回答
tips
プレビュー