[javascript] 문자열 포함 여부 확인하기

문자열 A가 문자열 B에 포함되어 있는지 확인하는 함수이다.

위치는 무관하고, A가 온전히 연속적으로 존재해야 한다.

한글도 처리된다.

// 문자열 배열화
export const splitKoreanStrToArr = (str = "") => {
      const cho = ["ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ"];
      const jung = ["ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ", "ㅖ", "ㅗ", "ㅘ", "ㅙ", "ㅚ", "ㅛ", "ㅜ", "ㅝ", "ㅞ", "ㅟ", "ㅠ", "ㅡ", "ㅢ", "ㅣ"];
      const jong = ["", "ㄱ", "ㄲ", "ㄳ", "ㄴ", "ㄵ", "ㄶ", "ㄷ", "ㄹ", "ㄺ", "ㄻ", "ㄼ", "ㄽ", "ㄾ", "ㄿ", "ㅀ", "ㅁ", "ㅂ", "ㅄ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ"];

      return [...str].flatMap(char => {
            const charCode = char.charCodeAt(0) - 44032;
            if (charCode < 0 || charCode > 11171) return char;

            const choIdx = Math.floor(charCode / 588);
            const jungIdx = Math.floor((charCode - (choIdx * 588)) / 28);
            const jongIdx = Math.floor(charCode % 28);

            return [cho[choIdx], jung[jungIdx], jong[jongIdx]].filter(Boolean);
      });
}


// 배열 연속 포함 여부
export const arrIncludeCheck = (arrA = [], arrB = []) => {
      let idxB = arrB.join(',').indexOf(arrA.join(','))

      return idxB !== -1
}

// 문자열 포함 비교 여부
export const stringContainCheck = (str1 = "", str2 = "") => {
      const arr1 = splitKoreanStrToArr(str1)
      const arr2 = splitKoreanStrToArr(str2)

      return arrIncludeCheck(arr1, arr2)
}

Leave a Comment