[정규식] 재미난? 정규식 Again #15 - 유니코드 > 정규표현식

정규표현식

[정규식] 재미난? 정규식 Again #15 - 유니코드 정보

[정규식] 재미난? 정규식 Again #15 - 유니코드

본문

한글 멘션을 할려고 하다 보면, 한글 초성 처리가 중요한것 같습니다.

 

아래는 냑에 있는 정규식 코드의 일부입니다.

 


matcher: function(flag, subtext, should_startWithSpace, acceptSpaceBar) {
    flag = flag.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
    if (should_startWithSpace) {
        flag = '(?:^|\\s)' + flag;
    }
    _a = decodeURI("%C3%80");
    _y = decodeURI("%C3%BF");
    space = acceptSpaceBar ? "\ " : "";
    regexp = new RegExp(flag + "([가-힣ㄱ-ㅎA-Za-z" + _a + "-" + _y + "0-9_" + space + "\'\.\+\-]*)$|" + flag + "([^\\x00-\\xff]*)$", 'gi');
    match = regexp.exec(subtext);

 

1. flag = flag.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");

  -, [, ], /, {, }, (, ), *, +, ?, ., \, ^, $, | 을 "\$&" 로 변경하는 것 같습니다.

2. 스페이스 시작하면 flag 에 ^ 또는 whitespace \s 를 flag 앞에 넣습니다.

    if (should_startWithSpace) {

        flag = '(?:^|\\s)' + flag;

    }

3. 에서  까지의 한글

    _a = decodeURI("%C3%80");

    _y = decodeURI("%C3%BF");

4. 스페이스를 포함하면 "\ " 아니면 empty ""

space = acceptSpaceBar ? "\ " : "";

5. ([가-힣ㄱ-ㅎA-Za-z" + _a + "-" + _y + "0-9_" + space + "\'\.\+\-]*)$|

를 정리하면 ([가-힣ㄱ-ㅎA-Za-z쎀-쎿0-9_\ \'\.\+\-]*)$|

6. ([^\x00-\xff]*)$  은 Ascii char 0x00 에서 0xff까지가 아닌것이네요.

 

대략 정리하면 아래와 같이 되겠네요


(?:^|\\s)([가-힣ㄱ-ㅎA-Za-z쎀-쎿0-9_\ \'\.\+\-]*)$|(?:^|\\s)([^\x00-\xff]*)$

?:  ( )으로 그룹으로 지정하지 말라는 이야기 입니다.

^: 시작표시

|: OR

\s: whitespace입니다. Space, tab, line feed (newline), carriage return, form feed, and vertical tab

가-힣: 모든 한글

ㄱ-ㅎ: 초성

A-Z: 영문 대문자

a-z: 영문 소문자

0-9: 숫자

_, 스페이스, ', ., +,- 의 특수문자 중 하나입니다.

 

아래의 테스트글을 가지고 https://regex101.com/ 에서 테스트해보니

6번은 한글이 아닌 경우를 잡아 주는 것 같습니다.

앞부분이 한글, 영문, 숫자, 특수기호 조합을 잡아줍니다.

중간에 스페이스를 포함시킬지 말지에 따라 포함되고 안되고.

 

1번줄의 의미는 정확하게 모르겠습니다.

------------------------------

한글 테스트
test

t한글

0한글

닉_네.임'+_
你好
こんにちは

亞波治

------------------------------

 

질문 숫자와 특수기호만 빼고 모든 유니코드를 지원하는 정규식은?

 

추신: 1번줄의 의미를 알려주시면 감사하겠습니다. 

 

추천
0

댓글 0개

전체 30 |RSS
정규표현식 내용 검색

회원로그인

진행중 포인트경매

  1. 참여37 회 시작21.10.21 13:00 종료21.10.28 13:00
(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIR SOFT