JSで濁点(濁音)・半濁点(半濁音)・清音を変換したい【JavaScript】

銀行や図書館なんかにあるタッチ式の50音入力で濁点や半濁点キーがありますよね?

その動きをWEB(JS)で作ろうとして、かな(カナ)の「清音→濁音」「濁音→清音」「清音→半濁音」「半濁音→清音」を変換する関数を作りました。

ただ、スマートなやり方が思い浮かばなかったので「どうせ50音だけなんだからゴリ押しでええやろ」という雑なものになっています。

ゴリ押しの無骨な処理ですけど、メモとして残しておきます。

/**
 * 濁点を付けた文字に変換する
 * 
 * @param {string} character 1文字だけ渡す
 * @returns {string} 濁音文字を返す(濁点を付けられない文字は undefined を返す) 
 */
function convert2Dakuon(character) {
  // 清音をキーにしたオブジェクト
  const seionKeyObj = {
    'か': 'が',
    'き': 'ぎ',
    'く': 'ぐ',
    'け': 'げ',
    'こ': 'ご',
    'さ': 'ざ',
    'し': 'じ',
    'す': 'ず',
    'せ': 'ぜ',
    'そ': 'ぞ',
    'た': 'だ',
    'ち': 'ぢ',
    'つ': 'づ',
    'て': 'で',
    'と': 'ど',
    'は': 'ば',
    'ひ': 'び',
    'ふ': 'ぶ',
    'へ': 'べ',
    'ほ': 'ぼ',
    'ウ': 'ヴ',
    'カ': 'ガ',
    'キ': 'ギ',
    'ク': 'グ',
    'ケ': 'ゲ',
    'コ': 'ゴ',
    'サ': 'ザ',
    'シ': 'ジ',
    'ス': 'ズ',
    'セ': 'ゼ',
    'ソ': 'ゾ',
    'タ': 'ダ',
    'チ': 'ヂ',
    'ツ': 'ヅ',
    'テ': 'デ',
    'ト': 'ド',
    'ハ': 'バ',
    'ヒ': 'ビ',
    'フ': 'ブ',
    'ヘ': 'ベ',
    'ホ': 'ボ'
  };
  return seionKeyObj[character];
}

console.log('あ → ', convert2Dakuon('あ'));
// log: あ →  undefined
console.log('か → ', convert2Dakuon('か'));
// log: か →  が
console.log('さ → ', convert2Dakuon('さ'));
// log: さ →  ざ
console.log('た → ', convert2Dakuon('た'));
// log: た →  だ
console.log('な → ', convert2Dakuon('な'));
// log: な →  undefined
console.log('は → ', convert2Dakuon('は'));
// log: は →  ば
console.log('ア → ', convert2Dakuon('ア'));
// log: ア →  undefined
console.log('カ → ', convert2Dakuon('カ'));
// log: カ →  ガ
console.log('サ → ', convert2Dakuon('サ'));
// log: サ →  ザ
console.log('タ → ', convert2Dakuon('タ'));
// log: タ →  ダ
console.log('ナ → ', convert2Dakuon('ナ'));
// log: ナ →  undefined
console.log('ハ → ', convert2Dakuon('ハ'));
// log: ハ →  バ

/**
 * 半濁点を付けた文字に変換する
 * 
 * @param {string} character 1文字だけ渡す
 * @returns {string} 半濁音文字を返す(半濁点を付けられない文字は undefined を返す)
 */
function convert2HanDakuon(character) {
  // 清音をキーにしたオブジェクト
  const seionKeyObj = {
    'は': 'ぱ',
    'ひ': 'ぴ',
    'ふ': 'ぷ',
    'へ': 'ぺ',
    'ほ': 'ぽ',
    'ハ': 'パ',
    'ヒ': 'ピ',
    'フ': 'プ',
    'ヘ': 'ペ',
    'ホ': 'ポ'
  };
  return seionKeyObj[character];
}

console.log('な → ', convert2HanDakuon('な'));
// log: な →  undefined
console.log('は → ', convert2HanDakuon('は'));
// log: は →  ぱ
console.log('ひ → ', convert2HanDakuon('ひ'));
// log: ひ →  ぴ
console.log('ふ → ', convert2HanDakuon('ふ'));
// log: ふ →  ぷ
console.log('へ → ', convert2HanDakuon('へ'));
// log: へ →  ぺ
console.log('ほ → ', convert2HanDakuon('ほ'));
// log: ほ →  ぽ
console.log('ナ → ', convert2HanDakuon('ナ'));
// log: ナ →  undefined
console.log('ハ → ', convert2HanDakuon('ハ'));
// log: ハ →  パ
console.log('ヒ → ', convert2HanDakuon('ヒ'));
// log: ヒ →  ピ
console.log('フ → ', convert2HanDakuon('フ'));
// log: フ →  プ
console.log('ヘ → ', convert2HanDakuon('ヘ'));
// log: ヘ →  ペ
console.log('ホ → ', convert2HanDakuon('ホ'));
// log: ホ →  ポ


/**
 * 濁音・半濁音から清音に変換する
 * 
 * @param {string} character 1文字だけ渡す
 * @returns {string} 清音文字を返す(濁音・半濁音でない文字は undefined を返す) 
 */
function convert2Seion(character) {
  // 濁音・半濁音をキーにしたオブジェクト
  const dakuonHandakuonKeyObj = {
    'が': 'か',
    'ぎ': 'き',
    'ぐ': 'く',
    'げ': 'け',
    'ご': 'こ',
    'ざ': 'さ',
    'じ': 'し',
    'ず': 'す',
    'ぜ': 'せ',
    'ぞ': 'そ',
    'だ': 'た',
    'ぢ': 'ち',
    'づ': 'つ',
    'で': 'て',
    'ど': 'と',
    'ば': 'は',
    'び': 'ひ',
    'ぶ': 'ふ',
    'べ': 'へ',
    'ぼ': 'ほ',
    'ヴ': 'ウ',
    'ガ': 'カ',
    'ギ': 'キ',
    'グ': 'ク',
    'ゲ': 'ケ',
    'ゴ': 'コ',
    'ザ': 'サ',
    'ジ': 'シ',
    'ズ': 'ス',
    'ゼ': 'セ',
    'ゾ': 'ソ',
    'ダ': 'タ',
    'ヂ': 'チ',
    'ヅ': 'ツ',
    'デ': 'テ',
    'ド': 'ト',
    'バ': 'ハ',
    'ビ': 'ヒ',
    'ブ': 'フ',
    'ベ': 'ヘ',
    'ボ': 'ホ',
    'ぱ': 'は',
    'ぴ': 'ひ',
    'ぷ': 'ふ',
    'ぺ': 'へ',
    'ぽ': 'ほ',
    'パ': 'ハ',
    'ピ': 'ヒ',
    'プ': 'フ',
    'ペ': 'ヘ',
    'ポ': 'ホ'
  };
  return dakuonHandakuonKeyObj[character];
}
console.log('あ → ', convert2Seion('あ'));
// log: あ →  undefined
console.log('が → ', convert2Seion('が'));
// log: が →  か
console.log('ざ → ', convert2Seion('ざ'));
// log: ざ →  さ
console.log('だ → ', convert2Seion('だ'));
// log: だ →  た
console.log('な → ', convert2Seion('な'));
// log: な →  undefined
console.log('ぱ → ', convert2Seion('ぱ'));
// log: ぱ →  は
console.log('ア → ', convert2Seion('ア'));
// log: ア →  undefined
console.log('ガ → ', convert2Seion('ガ'));
// log: ガ →  カ
console.log('ザ → ', convert2Seion('ザ'));
// log: ザ →  サ
console.log('ダ → ', convert2Seion('ダ'));
// log: ダ →  タ
console.log('ナ → ', convert2Seion('ナ'));
// log: ナ →  undefined
console.log('パ → ', convert2Seion('パ'));
// log: パ →  ハ

人気記事すべて表示

WEBすべて表示