UNPKG

hangul-util

Version:
476 lines (322 loc) 11.5 kB
# hangul-util 한글의 자모음의 분리,결합,검색 및 날짜와 숫자를 한글로 변환하는 등의 한글 기능 라이브러리입니다. <br/><br/> ## 번들링 된 파일 ```html <!-- Bundle File Path --> <script src="https://unpkg.com/hangul-util/dist/bundle.js"></script> ``` ```js // window.H H.includesByCho("ㅅㄱ", "사과"); ``` ## Install ```bash npm i hangul-util ``` ```ts // ts import { divideHangul } from "hangul-util"; // nodejs const { divideHangul } = require("hangul-util"); ``` ## Functions - [한글 분리](https://github.com/hyukson/hangul-util#%ED%95%9C%EA%B8%80-%EB%B6%84%EB%A6%AC) [ divide ] - [한글 결합](https://github.com/hyukson/hangul-util#%ED%95%9C%EA%B8%80-%EA%B2%B0%ED%95%A9) [ combine ] - [초성 검색](https://github.com/hyukson/hangul-util#%EC%B4%88%EC%84%B1%EA%B2%80%EC%83%89) [ includesByCho ] - [비슷한 단어 찾기](https://github.com/hyukson/hangul-util#%EB%B9%84%EC%8A%B7%ED%95%9C-%EB%8B%A8%EC%96%B4-%EC%B0%BE%EA%B8%B0) [ correctByDistance ] - [문자 정렬](https://github.com/hyukson/hangul-util#%EB%AC%B8%EC%9E%90-%EC%A0%95%EB%A0%AC) [ sortHangul ] - [한영 변환](https://github.com/hyukson/hangul-util#%ED%95%9C%EC%98%81-%EB%B3%80%ED%99%98) [ convertKey ] - [한글 발음 변환](https://github.com/hyukson/hangul-util#%ED%95%9C%EA%B8%80-%EB%B0%9C%EC%9D%8C-%ED%8C%8C%EC%8B%B1) [ normalize ] - [숫자 변환](https://github.com/hyukson/hangul-util#%EC%88%AB%EC%9E%90%EB%A5%BC-%ED%95%9C%EA%B8%80%EB%A1%9C) [ formatNumber ] - [날짜 포맷](https://github.com/hyukson/hangul-util#%EB%82%A0%EC%A7%9C-%ED%8F%AC%EB%A7%B7) [ formatDate ] - [조사](https://github.com/hyukson/hangul-util#%EC%A1%B0%EC%82%AC) [ josa ] - [문자 암호화](https://github.com/hyukson/hangul-util#%EB%AC%B8%EC%9E%90-%EC%95%94%ED%98%B8%ED%99%94) [ encode, decode ] - [언어 감지](https://github.com/hyukson/hangul-util#%EC%96%B8%EC%96%B4-%EA%B5%AC%EB%B3%84) [ getLocal ] - [한글 판별](https://github.com/hyukson/hangul-util#ishangul-ischo-isjung-isjong) [ isHangul, isCho, isJung, isJong ] <br/><br/> ## 한글 분리 `divideHangul(word: string, isSplit: boolean = true)` ```ts divideHangul("값싼"); // ['ㄱ', 'ㅏ', 'ㅂ', 'ㅅ', 'ㅆ', 'ㅏ', 'ㄴ'] ``` 문자를 초성, 중성, 종성으로 분리한 후 배열에 담아 반환해줍니다. <br/><br/> ```ts divideHangul("값싼", false); // ['ㄱ', 'ㅏ', 'ㅄ', 'ㅆ', 'ㅏ', 'ㄴ] ``` `isSplit` 타입이 `false`이면 중성, 종성 값이 분리되지 않습니다. <br/><br/> ```ts divideHangulByGroups("값싼"); // [ ['ㄱ', 'ㅏ', 'ㅂ', 'ㅅ'], ['ㅆ', 'ㅏ', 'ㄴ'] ] divideHangulByGroups("값싼", { isSplit: false }); // [ ['ㄱ', 'ㅏ', 'ㅄ'], ['ㅆ', 'ㅏ', 'ㄴ'] ] ``` `divideHangulByGroups`함수는 한글자별 분리된 글자가 배열에 묶여 반환됩니다. <br/><br/> ```ts divideHangulByGroups("값싼", { resultType: "object" }); // [ {cho: 'ㄱ', jung: 'ㅏ', jong: 'ㅂㅅ'}, {cho: 'ㅆ', jung: 'ㅏ', jong: 'ㄴ'} ] ``` `resultType`으로는 `'object' | 'array' | 'string' | 'index'` 타입이 존재하며, 기본은 `'array'` 타입으로 반환됩니다. <br/><br/> ### 그 외 ```ts divideByJung("ㅝ"); // ㅜㅓ divideByJong("ㄺ"); // ㄹㄱ ``` 중성, 종성을 분리해줍니다. <br/><br/> ## 한글 결합 `combineHangul(word: string | (string | string[])[])` ```ts combineHangul("ㅇㅏㄴㄴㅕㅇ"); // 안녕 combineHangul(["ㄱ", "ㅏ", "ㅂ", "ㅅ", "ㅆ", "ㅏ", "ㄴ"]); // 값싼 ``` 문자를 한글로 결합하여 반환합니다. ```ts combineHangul([["ㄱ", "ㅏ", "ㅂ"], "ㅅ", "ㅏ"]); // 갑사 ``` 2차원 배열로 결합할 그룹을 지정할 수 있습니다. ### 그 외 ```ts combineByJung("ㅜㅔ"); // ㅝ combineByJong("ㄹㄱ"); // ㄺ ``` 중성, 종성을 결합해줍니다. <br/><br/> ## 초성검색 `includesByCho(search: string, word: string)` ```ts includesByCho("ㅅㄱ", "사과"); // true includesByCho("ㅅ고", "사과"); // false ``` 문자를 초성검색 정규식으로 변환하여 비교한 결과를 반환합니다. ```ts const regex = makeRegexByCho("ㅅㄱ"); // /([사-싷][가-깋])/ "사과수박".replace(regex, "<mark>$1</mark>"); // <mark>사과</mark>수박 ``` 문자를 초성 정규식으로 변환시켜 반환됩니다. (`초성 정규식`을 사용할 수 있습니다.) <br/><br/> ## 숫자를 한글로 `formatNumber(format: number | string | null)` ```ts formatNumber(123456789); // 1억 2345만 6789 formatNumberAll(123456789); // 일억 이천삼백사십오만 육천칠백팔십구 ``` 숫자를 한글로 변환 시켜 주는 함수입니다. <br/><br/> ## 날짜 포맷 `formatDate(date: string | Date, formatStyle: string)` ```ts formatDate(new Date("2022-02-22 22:22:22")); // 2022년02월22일 22시22분22초 formatDate("2022-02-22", "YYYY년 MM월 DD일"); // 2022년 02월 22일 ``` 날짜를 주어진 `formatStyle` 형식에 맞춰서 변환시켜줍니다. <br/><br/> ## 비슷한 단어 찾기 `correctByDistance(word: string, list: string[], option)` ```ts correctByDistance("사과", ["사자", "호랑이", "사고"]); // [ '사고', '사자' ] ``` 레벤슈타인 거리 알고리즘을 이용하여 `단어 근접수치`를 비교해 반환해줍니다. <br/><br/> ### 옵션지정 `option: { distance: number = 2, maxSlice: number = 10, isSplit: boolean = true }`; ```ts const option = { distance: 4, maxSlice: 1, isSplit: false }; correctByDistance("num", ["number", "string", "boolean"], option); // [ 'number' ] ``` 옵션을 지정하여 필터되는 수치를 조절하거나, 한글분해 작업을 해제할 수 있습니다. <br/><br/> ## 문자 정렬 `sortByASC(array: any[], compare: string[] | string)` ```ts sortByASC(["사과", "귤", "바나나"]); // [ "귤", "바나나", "사과" ] sortByDESC(["사과", "귤", "바나나"]); // [ "사과", "바나나", "귤" ] ``` 문자(한글,영어)를 `ASC(오름차순), DESC(내림차순)` 정렬시켜줍니다. ```ts const array = [ { name: ["귤"], age: 72 }, { name: ["사과"], age: 25 }, { name: ["귤"], age: 45 }, ]; sortByASC(array, ["name[0]", "age"]); /* const array = [ { name: ["귤"], age: 25 }, { name: ["귤"], age: 72 }, { name: ["사과"], age: 45 }, ]; */ ``` `compare`의 값으로 객체의 값을 특정할 수 있습니다. `(배열 - 다중조건)` <br/><br/> ### 별도의 조건 지정하기 `sortByGroups(array: any[], groups: (number | string)[], orderASC: boolean, compare: string)` ```ts const groups = ["회장", "사장", "부장", "대리", "사원"]; sortByGroups(["대리", "사원", "사장", "회장", "부장"], groups); // [ '회장', '사장', '부장', '대리', '사원' ] ``` `특정 배열`을 기준으로 정렬을 시켜줄 수 있습니다. > 기존 정렬 로직상 '회장''사원'보다 뒤에 위치해야하지만, `기준배열`으로 인해서 앞에 위치합니다. <br/> ## 한영 변환 `convertKey(word: string, toLanguage: 'ko' | 'en', isCombine: boolean = true)` ```ts convertKey("사과", "en"); // tkrhk convertKey("tkrhk", "ko"); // 사과 ``` `toLanguage` 타입 **키보드 키** 에 맞게 문자를 변환시켜줍니다. ```ts convertKey("tkrhk", "ko", false); // ㅅㅏㄱㅗㅏ ``` `isCombine` 속성을 비활성화 할 시, 한글이 결합되지 않습니다. <br/><br/> ## 한글 발음 파싱 `normalize(text: string, isSpace: boolean)` ```ts normalize("이탈리아"); // 'i tar ri a' normalize("이탈리아", false); // 'itarria' ``` 한글 발음을 영어로 변환하여줍니다. <br/><br/> ## 조사 `formatJosa(word: string)` ```ts formatJosa("인생[이란/란]"); // "인생이란" formatJosa("인생[란/테스트]"); // "인생이란" ``` `단어[조사1/조사2]` 형식의 텍스트를 `단어[조사]`로 알맞게 변환됩니다. > '은/는', '이/가'와 같은 많이 알려진 조사는 자동으로 포맷됩니다. `[란/테스트] -> [이란/란]` ### 그 외 `josa(word: string, josa: string)` ```ts josa("인생", "란"); // '이란' ``` 단어에 따른 `조사` 정보만을 반환 받습니다. <br/><br/> ## 문자 암호화 `encode(input: any), decode(input: any)` ```ts encode("테스트123"); // 5RVpsUUtCalNWcEVWb1ZWU0Zsa1FLUlRUVXBFVkprWE42S... encode(["바나나", "자두", "귤"]); // 2SjNKVFZESXlKVGxVSkZKVFZCa3dKVUlVTTNKVVZGRTBRaVV... ``` 문자를 암호화 시켜주며 `객체와 배열` 데이터도 암호화 대상입니다. ```ts const encode1 = encode("테스트123"); decode(encode1); // 테스트123 const encode2 = encode(["바나나", "자두", "귤"]); decode(encode2); // ['바나나', '자두', '귤'] ``` `encode`로 변환된 암호문자를 `decode` 함수로 복호화 시킬 수 있습니다. <br/><br/> ## 언어 구별 `getLocalByGroups(word: string, isPercent: boolean)` ```ts getLocalByGroups("a1"); // ['en', 'number']; ``` 각 문자에 대한 언어를 배열에 담아서 반환해줍니다. ```ts getLocalByGroups("안녕하세요! Hello, world! 1234 #", true); /* { ko: 18.52, en: 37.04, number: 14.81, special: 29.63, etc: 0, } */ ``` `isPercent` 값을 통해서, 언어가 사용된 퍼센트를 나타내는 객체를 반환 받을 수 있습니다. <br/><br/> ## isHangul, isCho, isJung, isJong `isHangul(word: string), isHangulGroups(word: string)` ```ts isHangul("사과"); // true isCho("ㅅㄱ"); // true isJung("ㅏㅘ"); // true isJong("ㄳ"); // true ``` 입력된 문자가 한글, 초성, 중성, 종성인지 판별합니다. ```ts isHangulByGroups("사!"); // [true, false] isChoByGroups("ㅅㅏ"); // [true, false] isJungByGroups("ㅅㅘ"); // [false, true] isJongByGroups("ㄳㅏㅅ"); // [true, false, true] ``` 입력된 모든 문자의 한글, 초성, 중성, 종성 여부를 판별하여 배열에 담아 반환됩니다. <br/><br/> ## 기타 함수(utils) ### isNumber `isNumber(input: any)` ```ts isNumber(null); // false isNumber(0); // true ``` 입력값의 숫자 여부를 판별합니다. ### reverseByObject `reverseByObject(object: any)` ```ts reverseByObject({ a: 1, b: 2, c: 3 }); // { 1: 'a', 2: 'b', 3: 'c' } ``` 객체의 `Key, Value` 값을 서로 바꿔 재구성한 데이터를 반환해줍니다. ### getNestedProperty `getNestedProperty(key: string[] | string, object: any)` ```ts const object = { a: { b: 2 } }; object["a.b"]; // undefined getNestedProperty("a.b", object); // 2 getNestedProperty("[0].a", [{ a: 4 }, {}]); // 4 ``` `object.a.b` 접근을 문자열로 가능하도록 만들어주는 함수입니다. ### chunkAtEnd `chunkAtEnd(value: string, n: number)` ```ts chunkAtEnd("12345678", 4); // [ '5678', '1234' ] chunkAtEnd("12345678", 1).join(""); // '87654321' ``` 문자를 **뒤에서부터** n개씩 자른 아이템을 배열에 담아 반환해줍니다. ### splitByKey `splitByKey(key: string)` ```ts splitByKey("a.b"); // ['a', 'b']; splitByKey("a[5]"); // ['a', 5]; ``` Key를 차례대로 구분한 값을 배열에 담아 반환해줍니다.