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: パ → ハ