이번 글에서는 문자열을 입력받아 각 알파벳에 대응하는 숫자를 출력하는 JavaScript 함수를 작성해 보겠습니다.
알파벳과 숫자의 대응 관계는 다음과 같습니다.
a = 1 b = 2 c = 3 d = 4 e = 5 . . . Y = 25 Z = 26
문제 이해하기
예를 들어 입력값이 "hello man"이라면, 공백을 제외한 각 문자에 해당하는 숫자가 출력되어야 합니다.
"8,5,12,12,15,13,1,14"
여기서 h=8, e=5, l=12, l=12, o=15, m=13, a=1, n=14를 의미합니다.
구현 원리
핵심 아이디어는 charCodeAt() 메서드를 활용하는 것입니다. 소문자 'a'의 유니코드 값은 97이므로, 각 문자의 charCodeAt(0) 결과에서 96을 빼면 a=1부터 시작하는 순번을 얻을 수 있습니다. 또한 정규표현식으로 알파벳 여부를 검사하여 공백이나 특수문자는 건너뛰도록 처리합니다.
예제 코드
다음은 전체 구현 코드입니다.
const str = 'hello man';
const charPosition = str => {
str = str.split('');
const arr = [];
const alpha = /^[A-Za-z]+$/;
for(i=0; i < str.length; i++){
if(str[i].match(alpha)){
const num = str[i].charCodeAt(0) - 96;
arr.push(num);
}else{
continue;
};
};
return arr.toString();
}
console.log(charPosition(str));코드 설명
- str.split(''): 문자열을 한 글자씩 분리하여 배열로 만듭니다.
- /^[A-Za-z]+$/: 영문 알파벳만 통과시키는 정규표현식입니다.
- charCodeAt(0) - 96: 대소문자 구분 없이 알파벳 순번(1~26)을 계산합니다.
- arr.toString(): 결과 배열을 쉼표로 구분된 문자열로 변환합니다.
실행 결과
위 코드를 실행하면 콘솔에 다음과 같은 출력이 나타납니다.
"8,5,12,12,15,13,1,14"
마무리
이처럼 charCodeAt() 메서드와 간단한 정규표현식을 조합하면 문자열 내 각 알파벳의 위치 값을 손쉽게 추출할 수 있습니다. 대문자가 포함된 경우에도 동일하게 동작하므로, 다양한 문자열 처리 작업에 응용할 수 있습니다.