문자열 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)
}