This is personal project.
JavaScript/TypeScript 개발에 유용한 유틸리티 함수 모음입니다. 특히 한국어 처리, 날짜 포맷, 문자열 변환, 객체 조작 등의 기능을 제공합니다.
npm install jell-utils또는
yarn add jell-utilsimport util from 'jell-utils'
// 한국어 문자열 검사
util.isKorean('안녕하세요') // true
util.isKorean('hello') // false
// 날짜 포맷
util.getKoreanDate(new Date(), true) // "2024년 03월 15일"
util.formatDate(new Date()) // "2024-03-15"
// 문자열 변환
util.toCamelCase('hello_world') // "helloWorld"
util.toSnakeCase('Hello World') // "hello_world"문자열에 한국어가 포함되어 있는지 확인합니다.
util.isKorean('안녕하세요') // true
util.isKorean('한글test') // true
util.isKorean('hello') // false사업자등록번호의 유효성을 검증합니다.
util.isBusinessNumber('1018626554') // true
util.isBusinessNumber('101-86-26554') // true (하이픈 자동 제거)
util.isBusinessNumber('1234567890') // false한글 초성 검색을 지원합니다.
util.chosungSearch('사과', 'ㅅㄱ') // true
util.chosungSearch('김철수', 'ㄱㅊㅅ') // true
util.chosungSearch('바나나', 'ㅅㄱ') // false현재 시간을 YYYY-MM-DD HH:mm:ss 형식으로 반환합니다.
util.getNowDate() // "2024-03-15 14:30:25"날짜를 한국어 형식으로 변환합니다.
util.getKoreanDate(new Date('2024-03-15'), false) // "03월 15일"
util.getKoreanDate(new Date('2024-03-15'), true) // "2024년 03월 15일"날짜를 YYYY-MM-DD 형식으로 변환합니다.
util.formatDate(new Date('2024-03-15')) // "2024-03-15"D-day를 계산합니다.
const targetDate = new Date('2024-12-25')
util.calDDay(targetDate) // 목표 날짜까지 남은 일수두 날짜 사이의 차이를 계산합니다.
util.dateDiff('2024-01-01', '2024-01-02')
// { days: 1, hours: 0, minutes: 0, seconds: 0 }문자열을 camelCase로 변환합니다.
util.toCamelCase('hello_world') // "helloWorld"
util.toCamelCase('my variable name') // "myVariableName"문자열을 snake_case로 변환합니다.
util.toSnakeCase('Hello World') // "hello_world"
util.toSnakeCase('camelCase') // "camelcase"문자열을 Title Case로 변환합니다.
util.toTitleCase('hello_world') // "Hello World"
util.toTitleCase('helloWorld') // "Hello World"HTML 엔티티를 파싱합니다.
util.parseTag('<div>') // "<div>"HTML <br> 태그를 줄바꿈 문자로 변환합니다.
util.toText('안녕<br>하세요') // "안녕\n하세요"줄바꿈 문자를 HTML <br> 태그로 변환합니다.
util.toHtml('안녕\n하세요') // "안녕<br>하세요"HTML 태그를 안전하게 제거합니다.
util.clearTag('<div>안녕하세요</div>') // "안녕하세요"문자열의 특정 구간을 다른 문자열로 교체합니다.
util.replaceBetween('hello world', 'XXX', 6, 11) // "hello XXX"문자열에서 숫자만 추출합니다.
util.extractNumbers('010-1234-5678') // "01012345678"
util.extractNumbers('abc123def456') // "123456"민감한 정보를 마스킹합니다.
util.maskString('01012345678', 3, 4) // "010****5678"
util.maskString('1234567890123456', 4, 4) // "1234********3456"파일명에서 확장자를 추출합니다.
util.getFileExtension('image.jpg') // "jpg"
util.getFileExtension('document.PDF') // "pdf"문자열을 숫자로 안전하게 파싱합니다.
util.parseNumber('123', 0) // 123
util.parseNumber('123.45', 0, true) // 123.45
util.parseNumber('abc', 0) // 0 (기본값 반환)시간 문자열을 밀리초로 변환합니다.
util.parseTime('01:30', 0) // 90000 (1분 30초 = 90000ms)
util.parseTime('01:30:45', 0) // 90045 (1분 30초 45ms)객체를 깊은 복사합니다.
const original = { a: 1, b: { c: 2 } }
const copied = util.clone(original)
copied.b.c = 3
console.log(original.b.c) // 2 (원본은 변경되지 않음)경로 문자열로 중첩된 객체의 값을 가져옵니다.
const obj = { user: { profile: { name: 'John' } } }
util.getByPath(obj, 'user.profile.name') // "John"
util.getByPath(obj, 'user.age', 0) // 0 (기본값)경로 문자열로 중첩된 객체의 값을 설정합니다.
const obj = {}
util.setByPath(obj, 'user.profile.name', 'John')
// obj = { user: { profile: { name: 'John' } } }두 객체를 깊게 병합합니다.
const target = { a: 1, b: { c: 2, d: 3 } }
const source = { b: { d: 4, e: 5 }, f: 6 }
util.deepMerge(target, source)
// { a: 1, b: { c: 2, d: 4, e: 5 }, f: 6 }객체를 URL 쿼리 스트링으로 변환합니다.
util.objectToQueryString({ name: 'John', age: 30 })
// "name=John&age=30"두 배열이 같은지 비교합니다 (얕은 비교).
util.equalArrays([1, 2, 3], [1, 2, 3]) // true
util.equalArrays([1, 2, 3], [1, 2, 4]) // false배열을 특정 키 기준으로 그룹화합니다.
const items = [
{ name: 'Apple', category: 'fruit' },
{ name: 'Carrot', category: 'vegetable' },
{ name: 'Banana', category: 'fruit' }
]
util.groupBy(items, 'category')
// {
// fruit: [{ name: 'Apple', ... }, { name: 'Banana', ... }],
// vegetable: [{ name: 'Carrot', ... }]
// }배열을 특정 키 기준으로 정렬합니다.
const items = [
{ name: 'Charlie', age: 30 },
{ name: 'Alice', age: 25 }
]
util.sortBy(items, 'age', 'asc')
// [{ name: 'Alice', age: 25 }, { name: 'Charlie', age: 30 }]실패한 비동기 함수를 지수 백오프로 재시도합니다.
const fetchData = async () => {
const response = await fetch('https://api.example.com/data')
return response.json()
}
// 최대 3번 재시도, 초기 지연 1초
await util.retry(fetchData, 3, 1000)현재 디바이스가 iOS인지 확인합니다.
if (util.isiOS()) {
console.log('iOS 디바이스입니다')
}이 라이브러리는 TypeScript로 작성되었으며 완전한 타입 정의를 제공합니다.
import util from 'jell-utils'
// 타입 추론이 자동으로 작동합니다
const result = util.parseNumber('123', 0) // number
const date = util.getKoreanDate() // string- 🎉 초기 릴리즈
- ✨ 한국어 유틸리티 (isKorean, isBusinessNumber, chosungSearch)
- ✨ 날짜 유틸리티 (getNowDate, getKoreanDate, formatDate, calDDay, dateDiff)
- ✨ 문자열 유틸리티 (toCamelCase, toSnakeCase, toTitleCase, parseTag, toText, toHtml, clearTag, replaceBetween, extractNumbers, maskString, getFileExtension)
- ✨ 숫자 유틸리티 (parseNumber, parseTime)
- ✨ 객체 유틸리티 (clone, getByPath, setByPath, deepMerge, objectToQueryString)
- ✨ 배열 유틸리티 (equalArrays, groupBy, sortBy)
- ✨ 비동기 유틸리티 (retry)
- ✨ 브라우저 유틸리티 (isiOS)
- ✅ Jest를 사용한 테스트 커버리지 추가
- 📝 TypeScript 타입 정의 포함