toss / es-hangul

A modern JavaScript library for handling Hangul characters.
https://es-hangul.slash.page/
MIT License
1.15k stars 72 forks source link

[Feature]: Add Functions for Hangul Detection #154

Open youngjae99 opened 3 weeks ago

youngjae99 commented 3 weeks ago

Description

This feature request proposes the addition of two new functions, isHangul and isOnlyHangul, to enhance our text processing capabilities. These functions will allow for the detection of Hangul characters and ensure that a string contains only Hangul characters, respectively.

Possible Solution

  1. isHangul(value: string): checks if a given string contains any Hangul characters.

    export function isHangul(value: string) {
    const hangulRegex = /[ㄱ-ㅎㅏ-ㅣ가-힣]/g;
    return hangulRegex.test(value);
    }
  2. isOnlyHangul(value: string): checks if a given string contains only Hangul characters, ensuring there are no English letters or numbers present.

    export function isOnlyHangul(value: string) {
    const hangulRegex = /[ㄱ-ㅎㅏ-ㅣ가-힣]/g;
    const englishNumberRegex = /[a-zA-Z0-9]/g;
    
    // 문자열에 영어나 숫자가 포함되어 있으면 한글이 아님
    if (englishNumberRegex.test(value)) {
    return false;
    }
    
    // 문자열에 영어나 숫자가 없으면 한글임
    return hangulRegex.test(value);
    }

etc.

No response

po4tion commented 3 weeks ago

https://github.com/toss/es-hangul/blob/main/src/_internal/hangul.ts 해당 파일에는 내부에서 사용하는 isHangul이라는 함수가 있는데요. 얻고자 하는 것은 같지만 그 과정이 좀 다르네요.

@youngjae99 님이 고안해주신 isHangul의 경우에는 한글과 그 외의 문자가 섞여있더라도 한글이 있다면 "한글"로 판단하고 true 값을 반환해주는데요. 입력 값으로 "고양이는 cat"이라고 한다면, 이것은 한글일까요 영어일까요? 이럴 경우는 한영혼용체라고 한다고 합니다.

안내해주신 기능으로 isHangul 네이밍을 사용하기 위해서는 먼저 한영혼용체 또는 그외의 한글과 혼합된 문자열이 입력값일 경우 한글로 판단한다는 전제가 깔려있어야 할 것 같아요. 그래서 isHangul이라는 네이밍 보다는 isMixedHangul, isCombinedHangul, containHangul 등의 네이밍과 더 어울리는 기능이라고 생각해요.

그리고 isOnlyHangul의 경우에도 조금 모호한 부분이 있는데요. 영어나 숫자만 판단하면 함수 네이밍에 비해 기능이 너무 좁다는게 제 의견인데요. 이스케이프 문자 또는 영어말고 일본어가 한글과 같이 입력된다면 어떻게 될까요? isOnlyHangul 이지만 true로 반환됩니다. 그래서 isOnlyHangul이라는 네이밍 보다는 extractNumberAndEnglish가 더 어울리는 것 같아요.

어떻게 생각하고 계신지 의견을 듣고 싶어요.

okinawaa commented 6 days ago

현재 존재하는 isHangul이 주어진 문자열이 모두 한글인지를 체크하고 있기 때문에 이미 구현 된 상황이라고 생각하고, 이것을 인터널에서만 사용하지 않고, 라이브러리 외부로 열어줘야한다고 생각합니다.

isHangul이라는 함수명을 들었을때 한글만 있는 문자열을 검증하는지 한글도 있는 문자열을 검증하는지 어느쪽에 더 가깝게 사람들은 생각할까 고민해봤는데요

함수명 isHangul은 일반적으로 “한글만 있는지” 검사한다고 생각하게 만듭니다. 왜냐하면 is라는 접두사는 주로 특정 조건을 만족하는지 여부를 확인하는 함수명에 사용되며, 따라서 isHangul은 “이 문자열이 한글인지?“를 확인하는 함수로 해석됩니다. 즉, 한글 문자만 포함되어 있는지 검사한다고 이해하는 것이 자연스럽습니다.

만약 “한글도 포함되어 있는지”를 검사하는 함수라면 함수명을 더 명확하게 containsHangul 또는 hasHangul과 같이 변경하는 것이 좋습니다. 이렇게 하면 함수의 목적이 한글이 포함되어 있는지 확인하는 것임을 더 분명하게 전달할 수 있다고 생각합니다.

현재 isHangul이 @youngjae99 님이 제안주신 isOnlyHangul과 유사하며, 이를 외부로 열어주는것은 찬성합니당