JavaScriptでカタカナの半角と全角を相互に変換する関数を書いてみました。
ポイントは半角カタカナの濁音、半濁音は2文字であること。そのため、こちらを先に変換します。
長音にも対応していますが「-」(半角ハイフン)には対応していません。
function convert_katakana_han_zen(str, option) {
//option=0:半角から全角, 1:全角から半角
var pairs, pairs_length, i, before, after;
option = option == 0 ? 0 : 1;
pairs = [
["ガ", "ガ"],
["ギ", "ギ"],
["グ", "グ"],
["ゲ", "ゲ"],
["ゴ", "ゴ"],
["ザ", "ザ"],
["ジ", "ジ"],
["ズ", "ズ"],
["ゼ", "ゼ"],
["ゾ", "ゾ"],
["ダ", "ダ"],
["ヂ", "ヂ"],
["ヅ", "ヅ"],
["デ", "デ"],
["ド", "ド"],
["バ", "バ"],
["パ", "パ"],
["ビ", "ビ"],
["ピ", "ピ"],
["ブ", "ブ"],
["プ", "プ"],
["ベ", "ベ"],
["ペ", "ペ"],
["ボ", "ボ"],
["ポ", "ポ"],
["ヴ", "ヴ"],
["ー", "ー"],
["ァ", "ァ"],
["ア", "ア"],
["ィ", "ィ"],
["イ", "イ"],
["ゥ", "ゥ"],
["ウ", "ウ"],
["ェ", "ェ"],
["エ", "エ"],
["ォ", "ォ"],
["オ", "オ"],
["カ", "カ"],
["キ", "キ"],
["ク", "ク"],
["ケ", "ケ"],
["コ", "コ"],
["サ", "サ"],
["シ", "シ"],
["ス", "ス"],
["セ", "セ"],
["ソ", "ソ"],
["タ", "タ"],
["チ", "チ"],
["ッ", "ッ"],
["ツ", "ツ"],
["テ", "テ"],
["ト", "ト"],
["ナ", "ナ"],
["ニ", "ニ"],
["ヌ", "ヌ"],
["ネ", "ネ"],
["ノ", "ノ"],
["ハ", "ハ"],
["ヒ", "ヒ"],
["フ", "フ"],
["ヘ", "ヘ"],
["ホ", "ホ"],
["マ", "マ"],
["ミ", "ミ"],
["ム", "ム"],
["メ", "メ"],
["モ", "モ"],
["ャ", "ャ"],
["ヤ", "ヤ"],
["ュ", "ュ"],
["ユ", "ユ"],
["ョ", "ョ"],
["ヨ", "ヨ"],
["ラ", "ラ"],
["リ", "リ"],
["ル", "ル"],
["レ", "レ"],
["ロ", "ロ"],
["ワ", "ヮ"],
["ワ", "ワ"],
["イ", "ヰ"],
["エ", "ヱ"],
["ヲ", "ヲ"],
["ン", "ン"],
["カ", "ヵ"],
["ケ", "ヶ"]
];
pairs_length = pairs.length;
for(i = 0; i < pairs_length; i++) {
before = new RegExp(pairs[i][option], "g");
after = pairs[i][1 - option];
str = str.replace(before, after);
}
return str;
}
//option=0:半角から全角, 1:全角から半角
var pairs, pairs_length, i, before, after;
option = option == 0 ? 0 : 1;
pairs = [
["ガ", "ガ"],
["ギ", "ギ"],
["グ", "グ"],
["ゲ", "ゲ"],
["ゴ", "ゴ"],
["ザ", "ザ"],
["ジ", "ジ"],
["ズ", "ズ"],
["ゼ", "ゼ"],
["ゾ", "ゾ"],
["ダ", "ダ"],
["ヂ", "ヂ"],
["ヅ", "ヅ"],
["デ", "デ"],
["ド", "ド"],
["バ", "バ"],
["パ", "パ"],
["ビ", "ビ"],
["ピ", "ピ"],
["ブ", "ブ"],
["プ", "プ"],
["ベ", "ベ"],
["ペ", "ペ"],
["ボ", "ボ"],
["ポ", "ポ"],
["ヴ", "ヴ"],
["ー", "ー"],
["ァ", "ァ"],
["ア", "ア"],
["ィ", "ィ"],
["イ", "イ"],
["ゥ", "ゥ"],
["ウ", "ウ"],
["ェ", "ェ"],
["エ", "エ"],
["ォ", "ォ"],
["オ", "オ"],
["カ", "カ"],
["キ", "キ"],
["ク", "ク"],
["ケ", "ケ"],
["コ", "コ"],
["サ", "サ"],
["シ", "シ"],
["ス", "ス"],
["セ", "セ"],
["ソ", "ソ"],
["タ", "タ"],
["チ", "チ"],
["ッ", "ッ"],
["ツ", "ツ"],
["テ", "テ"],
["ト", "ト"],
["ナ", "ナ"],
["ニ", "ニ"],
["ヌ", "ヌ"],
["ネ", "ネ"],
["ノ", "ノ"],
["ハ", "ハ"],
["ヒ", "ヒ"],
["フ", "フ"],
["ヘ", "ヘ"],
["ホ", "ホ"],
["マ", "マ"],
["ミ", "ミ"],
["ム", "ム"],
["メ", "メ"],
["モ", "モ"],
["ャ", "ャ"],
["ヤ", "ヤ"],
["ュ", "ュ"],
["ユ", "ユ"],
["ョ", "ョ"],
["ヨ", "ヨ"],
["ラ", "ラ"],
["リ", "リ"],
["ル", "ル"],
["レ", "レ"],
["ロ", "ロ"],
["ワ", "ヮ"],
["ワ", "ワ"],
["イ", "ヰ"],
["エ", "ヱ"],
["ヲ", "ヲ"],
["ン", "ン"],
["カ", "ヵ"],
["ケ", "ヶ"]
];
pairs_length = pairs.length;
for(i = 0; i < pairs_length; i++) {
before = new RegExp(pairs[i][option], "g");
after = pairs[i][1 - option];
str = str.replace(before, after);
}
return str;
}
コメント