문자열을 입력받아 원본 문자열에서 알파벳이 아닌 모든 문자를 제거한 새로운 문자열을 생성하고 반환하는 JavaScript 함수를 작성해야 합니다. 단, 문자열에 공백이 포함되어 있다면 공백은 제거하지 않고 그대로 유지해야 합니다.
예시
입력 문자열이 다음과 같다면 −
const str = 'he@656llo wor?ld';
출력 문자열은 다음과 같아야 합니다 −
const output = 'hello world';
구현 방법
이 문제를 해결하는 핵심 아이디어는 각 문자가 알파벳인지 또는 공백인지 판별하는 것입니다. 알파벳 문자는 toLowerCase()와 toUpperCase()를 적용했을 때 결과가 서로 다르다는 특징을 활용할 수 있습니다.
다음은 이를 구현한 코드입니다 −
const str = 'he@656llo wor?ld';
const isAlphaOrSpace = char => ((char.toLowerCase() !==
char.toUpperCase()) || char === ' ');
const removeSpecials = (str = '') => {
let res = '';
const { length: len } = str;
for(let i = 0; i < len; i++){
const el = str[i];
if(isAlphaOrSpace(el)){
res += el;
};
};
return res;
};
console.log(removeSpecials(str));출력 결과
콘솔에 출력되는 결과는 다음과 같습니다 −
hello world
코드 설명
isAlphaOrSpace 함수는 전달받은 문자가 알파벳인지 또는 공백인지 확인합니다. 알파벳 문자는 대소문자 변환 시 값이 달라지지만, 숫자나 특수문자는 변환 후에도 동일하게 유지되는 원리를 이용합니다.
removeSpecials 함수는 문자열의 각 문자를 순회하면서 위 판별 함수를 통과한 문자만 새로운 문자열에 이어 붙여 최종 결과를 반환합니다.
정규표현식을 활용한 대안
같은 작업은 정규표현식을 사용하면 한 줄로 더 간결하게 처리할 수도 있습니다.
const removeSpecials = (str = '') => str.replace(/[^a-zA-Z ]/g, ''); console.log(removeSpecials(str)); // 'hello world'
이 정규표현식은 알파벳 대소문자(a-zA-Z)와 공백( )이 아닌 모든 문자를 찾아 빈 문자열로 치환합니다. 코드가 짧아 가독성이 좋지만, 문자별 로직을 직접 제어해야 하는 경우에는 반복문 방식이 더 유용할 수 있습니다.