JavaScriptでカナ変換をおこなう

マルチバイト文字を変数に使えることを知っていると捗る。





サンプルソース



下記全角カタカナを半角カタカナに変換する関数

function convertTextFullToHalf(src) {
    var map = {
        ア: "ア", イ: "イ", ウ: "ウ", エ: "エ", オ: "オ",
        カ: "カ", キ: "キ", ク: "ク", ケ: "ケ", コ: "コ",
        サ: "サ", シ: "シ", ス: "ス", セ: "セ", ソ: "ソ",
        タ: "タ", チ: "チ", ツ: "ツ", テ: "テ", ト: "ト",
        ナ: "ナ", ニ: "ニ", ヌ: "ヌ", ネ: "ネ", ノ: "ノ",
        ハ: "ハ", ヒ: "ヒ", フ: "フ", ヘ: "ヘ", ホ: "ホ",
        マ: "マ", ミ: "ミ", ム: "ム", メ: "メ", モ: "モ",
        ヤ: "ヤ", ユ: "ユ", ヨ: "ヨ",
        ラ: "ラ", リ: "リ", ル: "ル", レ: "レ", ロ: "ロ",
        ワ: "ワ", ヲ: "ヲ", ン: "ン", ー: "ー",
        ヴ: "ヴ",
        ガ: "ガ", ギ: "ギ", グ: "グ", ゲ: "ゲ", ゴ: "ゴ",
        ザ: "ザ", ジ: "ジ", ズ: "ズ", ゼ: "ゼ", ゾ: "ゾ",
        ダ: "ダ", ヂ: "ヂ", ヅ: "ヅ", デ: "デ", ド: "ド",
        バ: "バ", ビ: "ビ", ブ: "ブ", ベ: "ベ", ボ: "ボ",
        パ: "パ", ピ: "ピ", プ: "プ", ペ: "ペ", ポ: "ポ",
        ァ: "ァ", ィ: "ィ", ゥ: "ゥ", ェ: "ェ", ォ: "ォ",
        ャ: "ャ", ュ: "ュ", ョ: "ョ", ッ: "ッ", ヮ: "ヮ",
    };
    var texts = src.split("");
    var result = "";
    texts.forEach(function (chara) {
        if (map[chara]) {
            result += map[chara];
        }
        else {
            result += chara;
        }
    });
    return result;
}


以下動作サンプル

See the Pen convertTextFullToHalf by ninomae-makoto (@ninomae-makoto) on CodePen.




解説


正規表現でもできるがあまり好きではないので変換する値をマッピングする方法でおこなう。
変換元をキー、変換先を値にした連想配列を用意して1文字ずつ変換をかけている。
上記のやり方だと "ー" → "ー" などの特殊ケースにも適用できる。
逆変換をしたい場合は連想配列のキーと値を逆にすればよし。
splitはそれほど速くなかったはずなので変換対象のサイズには注意すること。代わりにcharAtなどを使うとよい。


いじょ

2017年7月23日日曜日