<!-- Wanakana の読み込み(CDN版) -->
<script src="https://unpkg.com/wanakana"></script>
<script>
// 母音が続かない単独の子音に対して、デフォルトの母音を補完する関数
function insertDefaultVowels(input) {
const vowels = 'aiueo'; // 小文字で統一
// 子音が単独の場合の変換テーブル
const defaultVowelMap = {
b: 'bu', // ブ
c: 'ku', // ク
d: 'do', // ド
f: 'fu', // フ
g: 'gu', // グ
h: 'hu', // フ(「hu」としておくと wanakana では「フ」になる)
j: 'ju', // ジュ
k: 'ku', // ク
l: 'ru', // ル(l は r 音に置換)
m: 'mu', // ム
n: 'n', // 単独の n は通常「ン」になる(特殊なケースもあるので注意)
p: 'pu', // プ
q: 'ku', // q は通常「ku」とする
r: 'ru', // ル
s: 'su', // ス
t: 'to', // ト ※「tsu」にするかは検討次第
v: 'vu', // ヴ
w: 'wu', // ウ
x: 'ku', // x は「ku」とする(場合により「クス」とするかも)
y: 'yu', // ユ
z: 'zu' // ズ
};
let output = '';
// 入力文字列を1文字ずつチェック
for (let i = 0; i < input.length; i++) {
const char = input[i];
// アルファベットのみを対象にする
if (/[a-zA-Z]/.test(char)) {
const lowerChar = char.toLowerCase();
if (defaultVowelMap.hasOwnProperty(lowerChar)) {
const nextChar = input[i + 1];
// 次の文字が存在し、かつ母音であればそのまま出力
if (nextChar && vowels.indexOf(nextChar.toLowerCase()) !== -1) {
output += char;
continue;
} else {
// 母音が続かない場合、変換テーブルの値を補完して出力
output += defaultVowelMap[lowerChar];
continue;
}
}
}
// 上記に該当しない場合はそのまま出力
output += char;
}
return output;
}
document.addEventListener('DOMContentLoaded', function() {
// 入力フィールドと反映先フィールドのセレクタを定義
const mappings = [
{ source: "input#nonmember_name_name01", target: "input#nonmember_kana_kana01" },
{ source: "input#nonmember_name_name02", target: "input#nonmember_kana_kana02" },
{ source: "input#entry_name_name01", target: "input#entry_kana_kana01" },
{ source: "input#entry_name_name02", target: "input#entry_kana_kana02" },
{ source: "input#contact_name_name01", target: "input#contact_kana_kana01" },
{ source: "input#contact_name_name02", target: "input#contact_kana_kana02" }
];
mappings.forEach(function(mapping) {
const nameInput = document.querySelector(mapping.source);
const kanaInput = document.querySelector(mapping.target);
if (nameInput && kanaInput) {
nameInput.addEventListener('input', function() {
const inputValue = nameInput.value;
// 入力がローマ字(アルファベットとスペースのみ)の場合のみ処理
if (/^[A-Za-z\s]+$/.test(inputValue)) {
// まず、母音が不足している場合にデフォルトの母音を補完する
const processedInput = insertDefaultVowels(inputValue);
// 補完後の文字列を Wanakana でカタカナに変換
const katakana = wanakana.toKatakana(processedInput);
kanaInput.value = katakana;
} else {
// ローマ字以外が含まれている場合は、必要に応じて処理(ここでは空にしています)
kanaInput.value = '';
}
});
}
});
});
</script>