全角かな or カナを半角カナに変換する【JS】

全角かな or カナを半角カナに変換する【JS】

2018-12-2813 min read

目次

  1. 概要
  2. デモ
  3. サンプルコード

概要

全角かなもしくは全角カナを半角カナに変換するサンプルコードとデモを紹介します。

デモ

サンプルコード

HTML

<div>
    <div>
        <div>
            <div>
                <label>input</label>
                <textarea id="src"></textarea>
                <label>output</label>
                <textarea id="dst"></textarea>
                <div>
                    <button id="run">run</button>
                </div>
                <select id="kana-type">
                    <option value="all" selected>全て変換</option>
                    <option value="hiragana">かなのみ変換</option>
                    <option value="katakana">カナのみ変換</option>
                </select>
            </div>
        </div>
    </div>
</div>

JS

const KANA = {
  'normal': {
    'src': {
      'hiragana':
        'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんぁぃぅぇぉヵヶっゃゅょゎ。、「」ー',
      'katakana':
        'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォヵヶッャュョヮ。、「」ー',
    },
    'dst': 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォヵヶッャュョワ。、「」-',
    'suffix': '',
  },
  'dakuon': {
    'src': {
      'hiragana': 'がぎぐげござじずぜぞだぢづでどばびぶべぼゔ',
      'katakana': 'ガギグゲゴザジズゼゾダヂヅデドバビブベボヴ',
    },
    'dst': 'カキクケコサシスセソタチツテトハヒフヘホウ',
    'suffix': '゙',
  },
  'handakuon': {
    'src': {
      'hiragana': 'ぱぴぷぺぽ',
      'katakana': 'パピプペポ',
    },
    'dst': 'ハヒフヘホ',
    'suffix': '゚',
  },
};

document.getElementById('run').addEventListener('click', (e) => {
  var input = document.getElementById('src');
  var output = document.getElementById('dst');
  var type = document.getElementById('kana-type');

  output.value = '';

  var zenkaku = [];
  var hankaku = [];

  for (var key1 in KANA) {
    var src = KANA[key1].src;
    var dst = KANA[key1].dst;
    var suffix = '';

    if (KANA[key1].suffix) {
      suffix = KANA[key1].suffix;
    }

    for (var key2 in src) {
      if (type.value === 'all' || key2 === type.value) {
        var row = src[key2];
        for (var j = 0; j < row.length; j++) {
          zenkaku.push(row[j] + suffix);
          hankaku.push(dst[j] + suffix);
        }
      }
    }
  }

  input.value.split('').forEach((e) => {
    for (var i = 0; i < zenkaku.length; i++) {
      if (zenkaku[i] == e) {
        output.value += hankaku[i];
        return;
      }
    }
    output.value += e;
  });
});
Author
githubzennqiita
ただの備忘録です。

※外部送信に関する公表事項