회문(Palindrome)이란?
회문(팰린드롬)은 앞에서 읽어도 뒤에서 읽어도 동일하게 읽히는 단어, 문장 또는 숫자를 의미합니다. 예를 들어 '말라얄람(Malayalam)', 'madam', 'nurses run' 등이 대표적인 예입니다.
여기서는 정규 표현식(Regular Expression)을 활용해 영숫자(alphanumeric) 문자만 허용하도록 구현합니다. 내장 정규식인 \W를 사용하면 이 작업을 손쉽게 처리할 수 있습니다. 참고로 \W는 밑줄(_)을 포함하지 않으므로, 실제 코드에서는 [\W_]처럼 밑줄까지 함께 처리해 주는 것이 좋습니다.
구현 단계
- 먼저 문자열의 모든 문자를 소문자로 변환합니다.
- 다음으로 영숫자가 아닌 모든 값을 제거합니다. 이 작업은 내장 정규식인 '\W'를 사용하거나, 직접 '/[^a-zA-Z0-9]+/g'와 같은 정규식을 작성하여 수행할 수 있습니다.
- replace() 메서드를 사용해 영숫자가 아닌 값들을 빈 문자열("")로 치환합니다.
- 특수문자가 제거된 문자열이 앞뒤 어느 방향으로 읽어도 동일한지 확인합니다.
- split("")으로 문자열을 배열로 나눈 뒤 reverse() 메서드로 뒤집고, join("")으로 다시 합쳐 원본 문자열과 비교합니다.
- 두 문자열이 일치하면 "true", 그렇지 않으면 "false"가 출력됩니다.
아래 예제에서는 *, & 등의 특수문자가 입력에 포함되어 있더라도 프로그램은 영숫자 값만 검사하여 결과를 출력합니다.
예제
<html>
<body>
<script>
function palindrome(str){
var reg = /[\W_]/g; // '\W' 대신 "/[^a-zA-Z0-9]+/g"를 사용할 수도 있습니다
var smstr = str.toLowerCase().replace(reg, "");
var reversed = smstr.split("").reverse().join("");
if(reversed === smstr){
document.write("true");
}
else {
document.write("false");
}
}
palindrome("a929a*/(';-=,.*")
</script>
</body>
</html>
출력 결과
true