Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 숫자가 포함된 문자열 유효성 검사하기

문제 정의

문자열 str을 인수로 받아 처리하는 JavaScript 함수를 작성해야 합니다. 이 함수는 문자열 속 알파벳들이 각각 앞에 위치한 숫자를 기준으로 유효한지 검증하는 역할을 합니다.

구체적인 동작 방식은 다음과 같습니다. 먼저 문자열을 숫자를 기준으로 분리한 뒤, 각 숫자가 바로 뒤따르는 부분 문자열의 글자 수와 일치하는지 비교합니다. 모든 조합이 일치하면 해당 문자열은 유효한 것으로 판단하여 true를 반환하고, 하나라도 불일치하면 false를 반환해야 합니다.

예시

다음 문자열을 살펴보겠습니다.

5hello4from2me

이 문자열은 true를 반환해야 합니다. 숫자를 기준으로 분리하면 'hello', 'from', 'me' 세 개의 부분 문자열이 되는데, 각각의 길이가 5, 4, 2로 앞의 숫자와 정확히 일치하기 때문입니다.

코드 구현

다음은 위 문제를 해결하는 코드입니다.

const str = '5hello4from2me';
const validateString = (str = '') => {
    const lenArray = [];
    let temp = '';
    for(let i = 0; i < str.length; i++){
        const el = str[i];
        if(+el){
            lenArray.push([+el, '']);
        }else{
            const { length: len } = lenArray;
            lenArray[len - 1][1] += el;
        };
    };
    return lenArray.every(sub => sub[0] === sub[1].length);
};
console.log(validateString(str));

코드 설명

이 코드의 핵심 로직을 단계별로 살펴보겠습니다.

  • 먼저 빈 배열 lenArray를 선언하여 숫자와 해당 부분 문자열을 [숫자, 문자열] 쌍의 형태로 저장합니다.
  • for 반복문으로 문자열의 각 문자를 순회하면서, 단항 더하기 연산자(+el)를 사용해 현재 문자가 숫자인지 확인합니다. 숫자라면 새로운 [숫자, 빈 문자열] 쌍을 배열에 추가합니다.
  • 현재 문자가 숫자가 아니라면, 마지막으로 추가된 쌍의 두 번째 요소(부분 문자열)에 해당 문자를 이어 붙입니다.
  • 모든 문자 순회가 끝나면 every 메서드를 사용해 각 쌍에서 숫자 값과 실제 문자열 길이가 일치하는지 확인하고, 그 결과를 최종적으로 반환합니다.

실행 결과

위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.

true