문자열을 처리하다 보면 영문자나 숫자가 아닌 특수 문자(!, @, # 등)를 다른 형태로 바꿔야 하는 경우가 종종 있습니다. 이번 글에서는 문자열에 포함된 모든 특수 문자를 해당 문자의 ASCII 코드 값으로 치환하는 JavaScript 함수를 작성해 보겠습니다.
즉, 함수는 특수 문자가 포함될 수 있는 문자열을 입력받고, 알파벳·숫자·공백은 그대로 유지한 채 특수 문자만 ASCII 값으로 변환된 새로운 문자열을 반환해야 합니다.
구현 예제
다음은 위 요구 사항을 구현한 코드입니다.
const str = 'Th!s !s @ str!ng th@t cont@!ns some special characters!!';
const specialToASCII = str => {
let res = '';
for(let i = 0; i < str.length; i++){
// 숫자, 알파벳(대소문자 무관), 공백은 그대로 유지
if(+str[i] || str[i].toLowerCase() !== str[i].toUpperCase() || str[i] === ' '){
res += str[i];
continue;
};
// 그 외의 특수 문자는 ASCII 코드 값으로 변환
res += str[i].charCodeAt(0);
};
return res;
};
console.log(specialToASCII(str));코드 동작 원리
이 함수의 핵심 로직은 다음과 같습니다.
1. 숫자 판별: +str[i]를 통해 해당 문자를 숫자로 변환했을 때 참이 되면 숫자이므로 그대로 추가합니다.
2. 알파벳 판별: toLowerCase()와 toUpperCase()의 결과가 서로 다르면 알파벳 문자입니다. 숫자나 기호는 대소문자 변환을 해도 값이 변하지 않기 때문에 이 방법으로 정확하게 구분할 수 있습니다.
3. 공백 처리: 공백 문자도 특수 문자로 취급하지 않고 그대로 유지합니다.
4. 특수 문자 변환: 위 조건에 해당하지 않는 문자는 charCodeAt(0) 메서드를 사용해 첫 번째(유일한) 문자의 ASCII 코드 값을 문자열에 이어 붙입니다.
출력 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
Th33s 33s 64 str33ng th64t cont6433ns some special characters3333
출력 결과를 살펴보면 느낌표(!)는 ASCII 값인 33으로, 골뱅이(@)는 64로 각각 치환된 것을 확인할 수 있습니다. 이처럼 반복문과 조건문, 그리고 charCodeAt() 메서드만 활용하면 별도의 외부 라이브러리 없이도 손쉽게 특수 문자를 ASCII 값으로 변환할 수 있습니다.