김 양의 멋따라 개발따기
JavaScript - 한글로 입력했을 때 영문으로 변환하기 본문
1. 문제 상황
- 한글로 입력을 받아도 영문으로 변환해야 하는 상황이었습니다.
- 글자 하나하나씩 치환해서 바꿔주는 방법으로 해결했습니다.
- 더 좋은 방법이 있다면 공유 부탁드립니다!
2. 코드
- HTML 코드
<input type="text" id="hangulInput" placeholder="한글로 입력하세요" />
<button onclick="convertToEnglish()">변환</button>
<p id="result"></p>
- JavaScript 코드
<script>
// 한글 음절 및 개별 자모에 대한 영문 자판 매핑
const initialConsonant = ['r', 'R', 's', 'e', 'E', 'f', 'a', 'q', 'Q', 't', 'T', 'd', 'w', 'W', 'c', 'z', 'x', 'v', 'g'];
const medialVowel = ['k', 'o', 'i', 'O', 'j', 'p', 'u', 'P', 'h', 'hk', 'ho', 'hl', 'y', 'n', 'nj', 'np', 'nl', 'b', 'm', 'ml', 'l'];
const finalConsonant = ['', 'r', 'R', 'rt', 's', 'sw', 'sg', 'e', 'f', 'fr', 'fa', 'fq', 'ft', 'fx', 'fv', 'fg', 'a', 'q', 'qt', 't', 'T', 'd', 'w', 'c', 'z', 'x', 'v', 'g'];
// 개별 자음과 모음에 대한 매핑 (분리된 상태로 입력된 경우 처리)
const singleConsonantMap = {
'ㄱ': 'r', 'ㄲ': 'R', 'ㄴ': 's', 'ㄷ': 'e', 'ㄸ': 'E', 'ㄹ': 'f', 'ㅁ': 'a',
'ㅂ': 'q', 'ㅃ': 'Q', 'ㅅ': 't', 'ㅆ': 'T', 'ㅇ': 'd', 'ㅈ': 'w', 'ㅉ': 'W',
'ㅊ': 'c', 'ㅋ': 'z', 'ㅌ': 'x', 'ㅍ': 'v', 'ㅎ': 'g'
};
const singleVowelMap = {
'ㅏ': 'k', 'ㅐ': 'o', 'ㅑ': 'i', 'ㅒ': 'O', 'ㅓ': 'j', 'ㅔ': 'p',
'ㅕ': 'u', 'ㅖ': 'P', 'ㅗ': 'h', 'ㅘ': 'hk', 'ㅙ': 'ho', 'ㅚ': 'hl',
'ㅛ': 'y', 'ㅜ': 'n', 'ㅝ': 'nj', 'ㅞ': 'np', 'ㅟ': 'nl', 'ㅠ': 'b',
'ㅡ': 'm', 'ㅢ': 'ml', 'ㅣ': 'l'
};
// 한글 음절을 자모로 분리하는 함수
function decomposeHangul(syllable) {
const hangulBase = 44032; // '가'의 유니코드 값
const initialBase = 588; // 초성 범위
const medialBase = 28; // 중성 범위
const code = syllable.charCodeAt(0) - hangulBase;
const initialIdx = Math.floor(code / initialBase);
const medialIdx = Math.floor((code % initialBase) / medialBase);
const finalIdx = code % medialBase;
return [initialIdx, medialIdx, finalIdx];
}
// 한글 음절과 개별 자모를 모두 처리하여 영어 자판에 맞게 변환하는 함수
function convertToEnglish() {
const input = document.getElementById('hangulInput').value;
let result = '';
for (let char of input) {
const code = char.charCodeAt(0);
// 한글 음절인지 확인
if (code >= 44032 && code <= 55203) {
const [initialIdx, medialIdx, finalIdx] = decomposeHangul(char);
result += initialConsonant[initialIdx] + medialVowel[medialIdx] + finalConsonant[finalIdx];
}
// 개별 자음 처리
else if (singleConsonantMap[char]) {
result += singleConsonantMap[char];
}
// 개별 모음 처리
else if (singleVowelMap[char]) {
result += singleVowelMap[char];
}
// 한글이 아닌 문자는 그대로 출력
else {
result += char;
}
}
console.log(input)
console.log(result)
document.getElementById('result').textContent = result;
}
</script>
'Javascript' 카테고리의 다른 글
JavaScript - 핀치줌(Pinch Zoom) 구현하기 (1) | 2024.12.27 |
---|---|
JavaScript - 간단하게 새 창과 소통하는 Broadcast Channel API (1) | 2024.11.08 |
[HTML, CSS, JavaScript]carousel 구현하기 (0) | 2024.01.22 |
jQuery로 모바일 키보드 이벤트 감지하기 (0) | 2024.01.19 |
Javascript - animation이 끝나는 이벤트를 감지하기 (0) | 2023.11.06 |