漢数字変換用関数
- 関数の字数削減(処理内容は変更無し)
- 関数の字数削減(処理内容は変更無し)
- 使用例調整
- 使用例調整
- 記事再編/処理内容も結構変えてみました
- tempページにて公開
数値を漢数字に変換するJavaScript用関数です。
現状、整数のみ対応。小数対応させるならだいぶ処理変える必要がありそう🤔
source code
関数
JavaScript
- function cjkConverter(num,type){
- switch(typeof num){
- case 'number' : num+= '';
- case 'string' : num = num.replace(/\D+/g,'');break;
- default : return false;
- }
- if(type&&type!='each'&&type!='place') return false;
- var cjk_n = ['○','一','二','三','四','五','六','七','八','九'];
- var place = ['零','十','百','千','万','億','兆','京'];
- if(type=='each'||!type||num.length/4>place.length-3){
- return num.replace(/\d/g,s=>cjk_n[parseInt(s)]);
- }
- if(!parseInt(num)) return place[0];
- var n,str='';
- var arr=num.match(/\d{1,4}?(?=(\d{4})*$)/gm);
- for(var i=0,k=arr.length-1;i<=k;i++){
- if(!parseInt(arr[i])) continue;
- for(var j=0,l=arr[i].length-1;j<=l;j++){
- n=parseInt(arr[i][j]);
- if(!n) continue;
- if(j==l) str+=cjk_n[n];
- else str+=(n>1?cjk_n[n]:'')+place[l-j];
- }
- if(i!=k) str+=place[k-i+3];
- }
- return str;
- }
呼び出し
cjkConverter(num,type)
→例:cjkConverter(12345,'place')
引数
num
- ここの数値が漢数字変換される
- number型,string型どちらかで指定
type
- 変換内容を決められる
- string型で指定
- 下記どちらか
▽'each'
:
呼:cjkConverter(12345,'each')
戻:一二三四五
未指定時デフォルト選択
▽'place'
:
呼:cjkConverter(12345,'place')
戻:一万二千三百四十五
桁制限有
最大9999京以下略までしか変換できません。
超過時は'each'
選択時と同処理になります。
対応させたい場合は後述編集を。
▽
- 0
- 0
戻り値
string型
編集
対応桁数を増やす
デフォルトでは桁表記有変換時、最大数値は9999京以下略(1垓-1)です。
増やしたい場合は配列内に昇順で桁を足していってください。
例
- var place = ['零','十','百','千','万','億','兆','京','垓','𥝱','穣','溝','澗','正','載','極','恒河沙','阿僧祇','那由他','不可思議','無量大数'];
漢表記数値の桁に関しては、諸説あるためお好みの物を採用してください。
旧字体に変更したい
の文字をそれぞれお好きなように置き換えてください。
例
- var cjk_n = ['○','壱','弐','参','肆','伍','陸','漆','捌','玖'];
- var place = ['零','拾','佰','仟','萬','億','兆','京'];
使用例
demo
2018年
10月03日
JavaScript
- document.addEventListener('DOMContentLoaded',function(){
- document.querySelectorAll('.cjk_each,.cjk_place').forEach(function($tgt){
- var type = $tgt.classList.contains('cjk_each')? 'each':'place';
- $tgt.textContent = $tgt.textContent.replace(/\d+/g,str=>cjkConverter(str,type));
- });
- });
HTML
- <span class="cjk_each">2018年</span>
- <span class="cjk_place">10月03日</span>
cjk_each
(桁無)cjk_place
(桁有)どちらかのクラスを持つ要素内の数字を変換- 日付表記がアラビア数字のみのブログなんかで使えるんじゃないでしょうか。