FC2ブログ

無窮 i ラボ Blog

知的ネット社会、知そのもの、機械との共生、プログラミングに関して。

 
 

ローマ字をカタカナに変換するJavascriptを書きました。

ネット上に同じ機能の Javascript が数件公開されているのを見つけたのですが、コピーして使おうとしたら使えなかったので、自分で書いたコードを公開します。

昔ながらの(?)コードの書き方をしているので、分かりやすいと思います。

function Roman2Kana(txt){
txt = txt.replace(/kk/ig,'ッk');
txt = txt.replace(/ss/ig,'ッs');
txt = txt.replace(/tt/ig,'ッt');
txt = txt.replace(/tc/ig,'ッc');
txt = txt.replace(/nn/ig,'ッn');
txt = txt.replace(/hh/ig,'ッh');
txt = txt.replace(/mm/ig,'ッm');
txt = txt.replace(/yy/ig,'ッy');
txt = txt.replace(/rr/ig,'ッr');
txt = txt.replace(/ww/ig,'ッw');
txt = txt.replace(/gg/ig,'ッg');
txt = txt.replace(/zz/ig,'ッz');
txt = txt.replace(/jj/ig,'ッj');
txt = txt.replace(/dd/ig,'ッd');
txt = txt.replace(/bb/ig,'ッb');
txt = txt.replace(/pp/ig,'ッp');

txt = txt.replace(/sha/ig,'シャ');
txt = txt.replace(/shi/ig,'シ');
txt = txt.replace(/shu/ig,'シュ');
txt = txt.replace(/she/ig,'シェ');
txt = txt.replace(/sho/ig,'ショ');

txt = txt.replace(/cha/ig,'チャ');
txt = txt.replace(/chi/ig,'チ');
txt = txt.replace(/chu/ig,'チュ');
txt = txt.replace(/che/ig,'チェ');
txt = txt.replace(/cho/ig,'チョ');

txt = txt.replace(/tsu/ig,'ツ');

txt = txt.replace(/kya/ig,'キャ');
txt = txt.replace(/kyu/ig,'キュ');
txt = txt.replace(/kyo/ig,'キョ');

txt = txt.replace(/sya/ig,'シャ');
txt = txt.replace(/syu/ig,'シュ');
txt = txt.replace(/syo/ig,'ショ');

txt = txt.replace(/tya/ig,'チャ');
txt = txt.replace(/tyu/ig,'チュ');
txt = txt.replace(/tyo/ig,'チョ');

txt = txt.replace(/nya/ig,'ニャ');
txt = txt.replace(/nyu/ig,'ニュ');
txt = txt.replace(/nyo/ig,'ニョ');

txt = txt.replace(/hya/ig,'ヒャ');
txt = txt.replace(/hyu/ig,'ヒュ');
txt = txt.replace(/hyo/ig,'ヒョ');

txt = txt.replace(/mya/ig,'ミャ');
txt = txt.replace(/myu/ig,'ミュ');
txt = txt.replace(/myo/ig,'ミョ');

txt = txt.replace(/rya/ig,'リャ');
txt = txt.replace(/ryu/ig,'リュ');
txt = txt.replace(/ryo/ig,'リョ');

txt = txt.replace(/gya/ig,'ギャ');
txt = txt.replace(/gyu/ig,'ギュ');
txt = txt.replace(/gyo/ig,'ギョ');

txt = txt.replace(/zya/ig,'ジャ');
txt = txt.replace(/zyu/ig,'ジュ');
txt = txt.replace(/zyo/ig,'ジョ');

txt = txt.replace(/dya/ig,'ヂャ');
txt = txt.replace(/dyu/ig,'ヂュ');
txt = txt.replace(/dyo/ig,'ヂョ');

txt = txt.replace(/bya/ig,'バャ');
txt = txt.replace(/byu/ig,'バュ');
txt = txt.replace(/byo/ig,'バョ');

txt = txt.replace(/pya/ig,'パャ');
txt = txt.replace(/pyu/ig,'パュ');
txt = txt.replace(/pyo/ig,'パョ');

txt = txt.replace(/ja/ig,'ジャ');
txt = txt.replace(/ji/ig,'ジ');
txt = txt.replace(/ju/ig,'ジュ');
txt = txt.replace(/je/ig,'ジェ');
txt = txt.replace(/jo/ig,'ジョ');

txt = txt.replace(/fa/ig,'ファ');
txt = txt.replace(/fi/ig,'フィ');
txt = txt.replace(/fu/ig,'フ');
txt = txt.replace(/fe/ig,'フェ');
txt = txt.replace(/fo/ig,'フォ');

txt = txt.replace(/ka/ig,'カ');
txt = txt.replace(/ki/ig,'キ');
txt = txt.replace(/ku/ig,'ク');
txt = txt.replace(/ke/ig,'ケ');
txt = txt.replace(/ko/ig,'コ');

txt = txt.replace(/sa/ig,'サ');
txt = txt.replace(/si/ig,'シ');
txt = txt.replace(/su/ig,'ス');
txt = txt.replace(/se/ig,'セ');
txt = txt.replace(/so/ig,'ソ');

txt = txt.replace(/ta/ig,'タ');
txt = txt.replace(/ti/ig,'チ');
txt = txt.replace(/tu/ig,'ツ');
txt = txt.replace(/te/ig,'テ');
txt = txt.replace(/to/ig,'ト');

txt = txt.replace(/na/ig,'ナ');
txt = txt.replace(/ni/ig,'ニ');
txt = txt.replace(/nu/ig,'ヌ');
txt = txt.replace(/ne/ig,'ネ');
txt = txt.replace(/no/ig,'ノ');

txt = txt.replace(/ha/ig,'ハ');
txt = txt.replace(/hi/ig,'ヒ');
txt = txt.replace(/hu/ig,'フ');
txt = txt.replace(/he/ig,'ヘ');
txt = txt.replace(/ho/ig,'ホ');

txt = txt.replace(/ma/ig,'マ');
txt = txt.replace(/mi/ig,'ミ');
txt = txt.replace(/mu/ig,'ム');
txt = txt.replace(/me/ig,'メ');
txt = txt.replace(/mo/ig,'モ');

txt = txt.replace(/ya/ig,'ヤ');
txt = txt.replace(/yu/ig,'ユ');
txt = txt.replace(/yo/ig,'ヨ');

txt = txt.replace(/ra/ig,'ラ');
txt = txt.replace(/ri/ig,'リ');
txt = txt.replace(/ru/ig,'ル');
txt = txt.replace(/re/ig,'レ');
txt = txt.replace(/ro/ig,'ロ');

txt = txt.replace(/wa/ig,'ワ');
txt = txt.replace(/wo/ig,'ヲ');

txt = txt.replace(/ga/ig,'ガ');
txt = txt.replace(/gi/ig,'ギ');
txt = txt.replace(/gu/ig,'グ');
txt = txt.replace(/ge/ig,'ゲ');
txt = txt.replace(/go/ig,'ゴ');

txt = txt.replace(/za/ig,'ザ');
txt = txt.replace(/zi/ig,'ジ');
txt = txt.replace(/zu/ig,'ズ');
txt = txt.replace(/ze/ig,'ゼ');
txt = txt.replace(/zo/ig,'ゾ');

txt = txt.replace(/da/ig,'ダ');
txt = txt.replace(/di/ig,'ヂ');
txt = txt.replace(/du/ig,'ヅ');
txt = txt.replace(/de/ig,'デ');
txt = txt.replace(/do/ig,'ド');

txt = txt.replace(/ba/ig,'バ');
txt = txt.replace(/bi/ig,'ビ');
txt = txt.replace(/bu/ig,'ブ');
txt = txt.replace(/be/ig,'ベ');
txt = txt.replace(/bo/ig,'ボ');

txt = txt.replace(/pa/ig,'パ');
txt = txt.replace(/pi/ig,'ピ');
txt = txt.replace(/pu/ig,'プ');
txt = txt.replace(/pe/ig,'ペ');
txt = txt.replace(/po/ig,'ポ');

txt = txt.replace(/a/ig,'ア');
txt = txt.replace(/i/ig,'イ');
txt = txt.replace(/u/ig,'ウ');
txt = txt.replace(/e/ig,'エ');
txt = txt.replace(/o/ig,'オ');

txt = txt.replace(/n/ig,'ン');
txt = txt.replace(/m/ig,'ン');

return (txt);
}
スポンサーサイト



 このエントリーをはてなブックマークする このエントリーを含むはてなブックマーク

 このエントリーをはてなブックマークする このエントリーを含むはてなブックマーク
(1) 文字型の日付 yyyymmdd2 が 文字型の日付 yyyymmdd1 の何日後かを返すfunction
(例えば、DateSpan ('20150331', '20150402')= 3 ):

function DateSpan (yyyymmdd1, yyyymmdd2) {
// yyyymmdd1, yyyymmdd2 は文字列、スラッシュなし。
var myDate1 = new Date();
var myDate2 = new Date();
var span;
var yyyy1 = yyyymmdd1.substring(0,4) -0;
// マイナスじゃないとダメ。
var mm1 = yyyymmdd1.substring(4,6) -0;
var dd1 = yyyymmdd1.substring(6,8) -0;

var yyyy2 = yyyymmdd2.substring(0,4) -0;
// マイナスじゃないとダメ。
var mm2 = yyyymmdd2.substring(4,6) -0;
var dd2 = yyyymmdd2.substring(6,8) -0;
// ---
myDate1.setFullYear(yyyy1);
// 年月日の順でsetしていく。
// そのようにせず、年日月の順にsetすると、
// 例えば、今日が 4月の場合、
// myDate1 に 「2015/3/31」をsetしようとして、
// 「2015年」、「31日」をsetした時点で、
// 実在しない日付「2015/ 4/31」がsetされ、
// 「2015/ 5/1」に自動変換されるため、
// 最終的に myDate1 は、「2015/3/1」になってしまう。
myDate1.setMonth(mm1 -1) ;
myDate1.setDate(dd1);

myDate2.setFullYear(yyyy2);
myDate2.setMonth(mm2 -1) ;
myDate2.setDate(dd2);

span = myDate1.getTime() - myDate2.getTime();

span = Math.round( span /(24 * 60 * 60 * 1000));

return ( span );
}


(2) 文字型の日付 yyyymmdd の plus 日後の日付を文字型を返すfunction
(例えば、DateAdd ('20150331', 3)= '20150402' ):

function DateAdd (yyyymmdd, plus) {
// yyyymmdd・返り値 は文字列、スラッシュなし。
var myDate = new Date();
myDate.setDate(1);
// 最初に「1日」を設定する。
//
// そうしないと、今日が 2015/ 5/31 の場合、
// 後で「2015/ 2/15」を設定しようとすると、
// myDate に「2015年」「2月」を設定した時点で
// 実在しない日付「2015/ 2/31」がsetされ、
// myDate が、その日に相当する「2015/ 3/ 3」に
// なってしまう。
//
// 最後にmyDate に「15日」を設定すると、myDateは
// 「2015/ 3/15」になり、設定しようとしていた
// 「2015/ 2/ 15」とは異なってしまう。
var myDate2 = new Date();
myDate2.setDate(1);
var yyyy = yyyymmdd.substring(0,4) -0;
// マイナスじゃないとダメ。
var mm = yyyymmdd.substring(4,6) -0;
var dd = yyyymmdd.substring(6,8) -0;
var yyyymmdd2num = 0;
// ---
myDate.setFullYear(yyyy);
myDate.setMonth(mm -1) ;
myDate.setDate(dd);

myDate2.setTime( myDate.getTime() + 24 * 60 * 60 * 1000 * plus );

yyyy = myDate2.getFullYear();
mm = myDate2.getMonth() +1 ;
dd = myDate2.getDate();

yyyymmdd2num = dd + mm*100 + yyyy*10000;

return ( yyyymmdd2num + "" );
}
 このエントリーをはてなブックマークする このエントリーを含むはてなブックマーク
関数の call では、引数がない関数でも、( ) を忘れないこと。
 このエントリーをはてなブックマークする このエントリーを含むはてなブックマーク
innerHTMLに対して、'     abc'のように先頭からスペースが連続する文字列 * を与えると、IEとFirefoxで挙動が異なる。

 IE7では、先頭から連続したスペースが消されて、入る。

 FireFox3では、何も消されずにそのまま入る。


* : 正規表現で書けば、/^\s{1}/
 このエントリーをはてなブックマークする このエントリーを含むはてなブックマーク