プログラムを書こう!

実務や自作アプリ開発で習得した役に立つソフトウェア技術情報を発信するブログ

JavaScript で全角カタカナを半角カタカナに変換する

この記事は 2021 年 09 月 08 日に投稿しました。

f:id:paveway:20190914064630j:plain

目次

  1. はじめに
  2. JavaScript でで全角カタカナを半角カタカナに変換する
  3. おわりに

1. はじめに

こんにちは、iOS のエディタアプリPWEditorの開発者の二俣です。
今回は業務で使用している JavaScript で全角カタカナを半角カタカナに変換する方法についてです。

目次へ

2. JavaScript で全角カタカナを半角カタカナに変換する

JavaScript で全角カタカナを半角カタカナに変換するには、以下の様な実装にします。

実行例

// 全角カタカナを半角カタカナに変換します。
// その他の文字はそのまま返却します。
function fullWidth2HalfWidthKana(src) {
  const kanaMap = {
    "ガ": "ガ", "ギ": "ギ", "グ": "グ", "ゲ": "ゲ", "ゴ": "ゴ",
    "ザ": "ザ", "ジ": "ジ", "ズ": "ズ", "ゼ": "ゼ", "ゾ": "ゾ",
    "ダ": "ダ", "ヂ": "ヂ", "ヅ": "ヅ", "デ": "デ", "ド": "ド",
    "バ": "バ", "ビ": "ビ", "ブ": "ブ", "ベ": "ベ", "ボ": "ボ",
    "パ": "パ", "ピ": "ピ", "プ": "プ", "ペ": "ペ", "ポ": "ポ",
    "ヴ": "ヴ", "ヷ": "ヷ", "ヺ": "ヺ",
    "ア": "ア", "イ": "イ", "ウ": "ウ", "エ": "エ", "オ": "オ",
    "カ": "カ", "キ": "キ", "ク": "ク", "ケ": "ケ", "コ": "コ",
    "サ": "サ", "シ": "シ", "ス": "ス", "セ": "セ", "ソ": "ソ",
    "タ": "タ", "チ": "チ", "ツ": "ツ", "テ": "テ", "ト": "ト",
    "ナ": "ナ", "ニ": "ニ", "ヌ": "ヌ", "ネ": "ネ", "ノ": "ノ",
    "ハ": "ハ", "ヒ": "ヒ", "フ": "フ", "ヘ": "ヘ", "ホ": "ホ",
    "マ": "マ", "ミ": "ミ", "ム": "ム", "メ": "メ", "モ": "モ",
    "ヤ": "ヤ", "ユ": "ユ", "ヨ": "ヨ",
    "ラ": "ラ", "リ": "リ", "ル": "ル", "レ": "レ", "ロ": "ロ",
    "ワ": "ワ", "ヲ": "ヲ", "ン": "ン",
    "ァ": "ァ", "ィ": "ィ", "ゥ": "ゥ", "ェ": "ェ", "ォ": "ォ",
    "ッ": "ッ", "ャ": "ャ", "ュ": "ュ", "ョ": "ョ",
    "。": "。", "、": "、", "ー": "ー", "「": "「", "」": "」", "・": "・"
  };
  const regExp = new RegExp(`(${Object.keys(kanaMap).join("|")})`, "g");
  return src
    .replace(regExp, function(match) {
      return kanaMap[match];
    })
    .replace(/゛/g, '゙')
    .replace(/゜/g, '゚');
}

console.log(fullWidth2HalfWidthKana("ガギグゲゴ"));
console.log(fullWidth2HalfWidthKana("ザジズゼゾ"));
console.log(fullWidth2HalfWidthKana("ダヂヅゼゾ"));
console.log(fullWidth2HalfWidthKana("バビブベボ"));
console.log(fullWidth2HalfWidthKana("パピプペポ"));
console.log(fullWidth2HalfWidthKana("ヴヷヺ"));
console.log(fullWidth2HalfWidthKana("アイウエオ"));
console.log(fullWidth2HalfWidthKana("カキクケコ"));
console.log(fullWidth2HalfWidthKana("サシスセソ"));
console.log(fullWidth2HalfWidthKana("タチツテト"));
console.log(fullWidth2HalfWidthKana("ナニヌネノ"));
console.log(fullWidth2HalfWidthKana("ハヒフヘホ"));
console.log(fullWidth2HalfWidthKana("マミムメモ"));
console.log(fullWidth2HalfWidthKana("ヤユヨ"));
console.log(fullWidth2HalfWidthKana("ラリルレロ"));
console.log(fullWidth2HalfWidthKana("ワヲン"));
console.log(fullWidth2HalfWidthKana("ァィゥェォ"));
console.log(fullWidth2HalfWidthKana("ッャュョ"));
console.log(fullWidth2HalfWidthKana("。、ー「」・"));

実行結果

"ガギグゲゴ"
"ザジズゼゾ"
"ダヂヅゼゾ"
"バビブベボ"
"パピプペポ"
"ヴヷヺ"
"アイウエオ"
"カキクケコ"
"サシスセソ"
"タチツテト"
"ナニヌネノ"
"ハヒフヘホ"
"マミムメモ"
"ヤユヨ"
"ラリルレロ"
"ワヲン"
"ァィゥェォ"
"ッャュョ"
"。、ー「」・"

リファレンス

RegExpオブジェクト

Stringオブジェクト

replaceメソッド

目次へ

参考サイト

[JavaScript] 全角⇔半角の変換を行う(英数字、カタカナ)

3. おわりに

前々回

www.paveway.info

前回

www.paveway.info

同様ですが、カタカナの場合正規表現での処理は難しいようです。
そのため変換マップを使用して変換します。

紹介している一部の記事のコードはGitlabで公開しています。
興味のある方は覗いてみてください。

目次へ


私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。
弊社製品のハイブリッド OS Bi-OSは高い技術力を評価されており、特に制御系や通信系を得意としています。
私自身はiOS モバイルアプリウィンドウズアプリを得意としております。
ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。

また一緒に働きたい技術者の方も随時募集中です。
興味がありましたらご連絡ください。

EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688

目次へ