質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1130閲覧

アラビア数字(1,2,3...)を、漢数字(一,二,三...)へ変換する方法。【全角の0〜9、半角の0〜31まで】

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/12/11 02:04

編集2018/12/11 04:28

いつもお世話になっております。

現在、「縦書き」と「横書き」に対応した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|
|:--|:--:|--:|:--|:--:|--:|:--|:--:|--:|
|二〇|二一|二二|二三|二四|二五|二六|二七|二八|二九|

3031-
三〇三一

表を作成中に「半角数字と全角数字は分ける必要がないのではないか?」とも思ったのですが、
例えば「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で曜日ごとに文言の表示を変更する方法

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2018/12/11 02:27

英数字じゃなくて数字ですね、【半角・全角英数字の場合】 と【半角英数字の場合】 だと半角という条件が競合します
Takumiboo

2018/12/11 02:28

Javascriptで行う例についてはすでにご提示のURLにサンプルがあるように思いますが?
退会済みユーザー

退会済みユーザー

2018/12/11 03:04

【yambejpさん】これは大きな勘違いをしておりました…ご指摘ありがとうございます。修正しました。
退会済みユーザー

退会済みユーザー

2018/12/11 03:07

【Takumiboo】はい、こちらの記事を参考にさせていただきましたが、spanタグを用いた場合にどのように指定すれば置き換えることができるのか実装方法が分からないため、具体的なご提案をして頂ければと思いご質問しました。
guest

回答1

0

ベストアンサー

変換表を使って調整します

javascript

1<style> 2div.tategaki { 3 -webkit-writing-mode: vertical-rl; 4 -ms-writing-mode: tb-rl; 5 writing-mode: vertical-rl; 6} 7</style> 8<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 9<script> 10var henkanhyo={ 11 "0":"〇","1":"一","2":"二","3":"三","4":"四","5":"五","6":"六","7":"七","8":"八","9":"九", 12 "0":"〇","1":"一","2":"二","3":"三","4":"四","5":"五","6":"六","7":"七","8":"八","9":"九", 13}; 14$(function(){ 15 var v=$(".tategaki").text(); 16 v=v.replace(/1(?=[1-9])|1(?=[1-9])|10|10/g,"十").replace(/[0-9]|[0-9]/g,function(x){return henkanhyo[x]}); 17 $(".tategaki").text(v); 18}); 19</script> 20<div class="tategaki">「あああ」2018717日ー1128日:2018年3月15日ー12月25日:2108年3月31日</div>

※上記、2108は10が先に反応して2十8→二十八になります、
仕様をよくよく検討してください

縦横切替

javascript

1<style> 2div.tategaki { 3 -webkit-writing-mode: vertical-rl; 4 -ms-writing-mode: tb-rl; 5 writing-mode: vertical-rl; 6float:right; 7} 8</style> 9<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 10<script> 11var henkanhyo={ 12 "0":"〇","1":"一","2":"二","3":"三","4":"四","5":"五","6":"六","7":"七","8":"八","9":"九", 13 "0":"〇","1":"一","2":"二","3":"三","4":"四","5":"五","6":"六","7":"七","8":"八","9":"九", 14} 15$(function(){ 16 $('.contents').each(function(){ 17 $(this).data('yokogaki',$(this).text()); 18 var v=$(this).text(); 19 v=v.replace(/1(?=[1-9])|1(?=[1-9])|10|10/g,"十").replace(/[0-9]|[0-9]/g,function(x){return henkanhyo[x]}); 20 $(this).data('tategaki',v); 21 }); 22 $('[name=shosiki]').on('change',function(){ 23 if($(this).val()=='tategaki'){ 24 $('.contents').addClass('tategaki').removeClass('yokogaki').text(function(){return $(this).data('tategaki');}); 25 }else{ 26 $('.contents').removeClass('tategaki').addClass('yokogaki').text(function(){return $(this).data('yokogaki');}); 27 }; 28 }).filter(':checked').trigger('change'); 29}); 30</script> 31<label><input type="radio" name="shosiki" value="tategaki" checked>縦書き</label> 32<label><input type="radio" name="shosiki" value="yokogaki">横書き</label> 33<div class="contents">「あああ」2018717日ー1128</div> 34<div class="contents">2018年3月15日ー12月25日:2108年3月31日</div> 35

投稿2018/12/11 03:41

編集2018/12/11 05:07
yambejp

総合スコア114777

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/12/11 03:55

なるほど…変数はこのように指定できるのですね。1つ1つ分解して意味を理解しながら活用できるように学んでいきたいと思います。素晴らしい教材の提供をありがとうございます! 無事に実装できそうです。本当にありがとうございました^-^!!
退会済みユーザー

退会済みユーザー

2018/12/11 04:10

度々申し訳ありません。縦書きから横書きに切り替えた場合にはアラビア数字に戻したいと思っているのですが、<div class="tategaki"></div>の値をなにかで取得しておく必要があるのでしょうか。置換した値を元に戻すためにはどのようにすればよいのでしょうか。
yambejp

2018/12/11 05:09

切り替えたいとのことなので、縦書き用のデータと横書き用のデータをカスタムデータに保持させました
退会済みユーザー

退会済みユーザー

2018/12/11 10:02

ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問