ひらがなとカタカナの、全角と半角の変換についてみていきます。
英数字に関しては、前回の内容に記載されていますので、そちらをご確認下さい。
今回も文字コード云々でスッキリできればよいのですが、半角のカタカナの場合もあり、
文字コードのみでの対応は厳しいので、原始的な方法になってしまっています。
コードは短いので、そこまで困らないとは思います。
1.文字列.indexOf(検索する文字列)
「文字列」の中に「検索する文字列」が何番目に含まれるか?を調べます。
含まれない場合は、「-1」となります。
例えば、
let test = ‘abcあいうえお’;
let idx1 = test.indexOf(‘c’);
let idx2 = test.indexOf(‘A’);
let idx3 = test.indexOf(‘あいう’);
とあった時は、「idx1は2」、「idx2は-1」、「idx3は3」となります。
また引数を、「検索する文字列」、「開始位置」の2つにすることで、調べ始める位置を
指定する事もできます。
例えば、
let test2 = ‘abcあいabcうえお’;
let idx5 = test2.indexOf(‘c’);
let idx6 = test2.indexOf(‘c’, 5);
let idx7 = test2.indexOf(‘c’, 7);
let idx8 = test2.indexOf(‘c’, 8);
の場合、「idx5」はさきほどの例と同様に「2」となります。
「idx6」はインデックスが「5」の位置(2個目の a )から調べ始めるので、
最初の「c」ではなく、2個目の「c」に反応して「7」を返します。
同様に「idx7」もインデックスが「7」の位置(2個目の c )から
調べ始めるので、「7」を返します。
「idx8」はインデックスが「8」の位置(「う」の文字)から調べ始めるので、
それ以降に「c」の文字がないため「-1」を返します。
2.文字列.split(分割する文字列)
指定した文字列で、元の文字列を分割します。
例えば、
let moji = ‘1a23a456ab78’;
let splt1 = moji.split(‘a’);
let splt2 = moji.split(”);
let splt3 = moji.split(‘ab’);
let splt4 = moji.split(‘0’);
のような場合、
splt1は4つに分割され、splt1[0] = ‘1’ , splt1[1] = ’23’ , splt1[2] = ‘456’ , splt1[3] = ‘b78’となります。
splt2は1文字ずつ12個に分割され、splt2[0] = ‘1’ , splt2[1] = ‘a’ , splt2[2] = ‘2’ , splt2[3] = ‘3’ , …となります。
splt3は2つに分割され、splt3[0] = ‘1a23a456ab78’ , splt3[1] = ’78’となります。
splt4は1つに分割され、splt4[0] = ‘1a23a456ab78’となります。
3.完成形
文字コードをいじるだけでは、変換しきれない部分もあるので、原始的に配列を使用します。
配列はコピーして使用して下さい。
var hira = [“あ”, “い”, “う”, “え”, “お”, “か”, “き”, “く”, “け”, “こ”, “さ”, “し”, “す”, “せ”, “そ”, “た”, “ち”, “つ”, “て”, “と”, “な”, “に”, “ぬ”, “ね”, “の”, “は”, “ひ”, “ふ”, “へ”, “ほ”, “ま”, “み”, “む”, “め”, “も”, “や”, “ゆ”, “よ”, “ら”, “り”, “る”, “れ”, “ろ”, “わ”, “を”, “ん”, “が”, “ぎ”, “ぐ”, “げ”, “ご”, “ざ”, “じ”, “ず”, “ぜ”, “ぞ”, “だ”, “ぢ”, “づ”, “で”, “ど”, “ば”, “び”, “ぶ”, “べ”, “ぼ”, “ぱ”, “ぴ”, “ぷ”, “ぺ”, “ぽ”, “ぁ”, “ぃ”, “ぅ”, “ぇ”, “ぉ”, “ゃ”, “ゅ”, “ょ”, “っ”, “ゔ”];
var zenKata = [“ア”, “イ”, “ウ”, “エ”, “オ”, “カ”, “キ”, “ク”, “ケ”, “コ”, “サ”, “シ”, “ス”, “セ”, “ソ”, “タ”, “チ”, “ツ”, “テ”, “ト”, “ナ”, “ニ”, “ヌ”, “ネ”, “ノ”, “ハ”, “ヒ”, “フ”, “ヘ”, “ホ”, “マ”, “ミ”, “ム”, “メ”, “モ”, “ヤ”, “ユ”, “ヨ”, “ラ”, “リ”, “ル”, “レ”, “ロ”, “ワ”, “ヲ”, “ン”, “ガ”, “ギ”, “グ”, “ゲ”, “ゴ”, “ザ”, “ジ”, “ズ”, “ゼ”, “ゾ”, “ダ”, “ヂ”, “ヅ”, “デ”, “ド”, “バ”, “ビ”, “ブ”, “ベ”, “ボ”, “パ”, “ピ”, “プ”, “ペ”, “ポ”, “ァ”, “ィ”, “ゥ”, “ェ”, “ォ”, “ャ”, “ュ”, “ョ”, “ッ”, “ヴ”];
var hanKata = [“ア”, “イ”, “ウ”, “エ”, “オ”, “カ”, “キ”, “ク”, “ケ”, “コ”, “サ”, “シ”, “ス”, “セ”, “ソ”, “タ”, “チ”, “ツ”, “テ”, “ト”, “ナ”, “ニ”, “ヌ”, “ネ”, “ノ”, “ハ”, “ヒ”, “フ”, “ヘ”, “ホ”, “マ”, “ミ”, “ム”, “メ”, “モ”, “ヤ”, “ユ”, “ヨ”, “ラ”, “リ”, “ル”, “レ”, “ロ”, “ワ”, “ヲ”, “ン”, “ガ”, “ギ”, “グ”, “ゲ”, “ゴ”, “ザ”, “ジ”, “ズ”, “ゼ”, “ゾ”, “ダ”, “ヂ”, “ヅ”, “デ”, “ド”, “バ”, “ビ”, “ブ”, “ベ”, “ボ”, “パ”, “ピ”, “プ”, “ペ”, “ポ”, “ァ”, “ィ”, “ゥ”, “ェ”, “ォ”, “ャ”, “ュ”, “ョ”, “ッ”, “ヴ”];
function convHalfFull(inp, out, str, flg) {
if (str == null || str == ”) { return ”; }
let ret = “”;
let tmp = str.split(“”);
for (let i = 0; i < tmp.length; i++) {
let idx = inp.indexOf(tmp[i]);
if (idx == -1) {
if (flg == true) { ret = ret + tmp[i]; }
}
else { ret = ret + out[idx]; }
}
return ret;
}
最初の引数が元となる文字の種類、次の引数が変換後の文字の種類、
3つ目が該当する文字列以外も返すか返さないかのフラグです。
文字列に含まれる半角カタカナ以外は返さない方が都合がよい場合などは「false」として下さい。
使い方は、次のような感じになります。
let aaa = ‘あいうえおABC’;
aaa = convHalfFull(hira, zenKata, aaa, true);
aaa = convHalfFull(zenKata, hanKata, aaa, false);
aaa = aaa;
1回目の変換で、ひらがなが全角カタカナになります(全角カタカナ以外も返します)。
「aaa」は「アイウエオABC」となります。
2回目の変換で、全角カタカナが半角カタカナになります(半角カタカナ以外は返しません)。
「aaa」は「アイウエオ」となります。
システム開発のためのJavaScriptプログラミングに戻る
前回の内容はこちらから。