테스트 사이트 - 개발 중인 베타 버전입니다

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

· 5년 전 · 1389

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

 

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

 

[code]

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);

[/code]

 

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까지가 아닌것이네요.

 

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

[code]

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

[/code]

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

^: 시작표시

|: 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번줄의 의미를 알려주시면 감사하겠습니다. 

 

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

게시글 목록

번호 제목
10921
10920
10914
10913
10912
10911
10905
10904
10903
10898
10897
10896
10882
10879
10878
10877
10876
10874
10865
10856
10854
10845
10833
10830
10827
10819
10809
10803
10802
10801