[정규식] 재미난? 정규식 Again #15 - 유니코드
한글 멘션을 할려고 하다 보면, 한글 초성 처리가 중요한것 같습니다.
아래는 냑에 있는 정규식 코드의 일부입니다.
[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;
}
_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번줄의 의미를 알려주시면 감사하겠습니다.
게시판 목록
퀴즈게시판
채택은 '좋아요'와 같습니다.
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 1056 |
|
6년 전 | 3377 | |
| 1055 | 6년 전 | 4365 | ||
| 1054 | 6년 전 | 4843 | ||
| 1053 | 6년 전 | 2279 | ||
| 1052 | 6년 전 | 3417 | ||
| 1051 | 6년 전 | 2906 | ||
| 1050 |
NoNo5
|
6년 전 | 3742 | |
| 1049 |
|
6년 전 | 5890 | |
| 1048 |
dltjdgh
|
6년 전 | 1824 | |
| 1047 | 6년 전 | 4301 | ||
| 1046 | 6년 전 | 5492 | ||
| 1045 | 6년 전 | 1885 | ||
| 1044 |
sir닝겐
|
6년 전 | 5111 | |
| 1043 |
|
6년 전 | 3675 | |
| 1042 | 6년 전 | 1584 | ||
| 1041 |
|
6년 전 | 2175 | |
| 1040 | 6년 전 | 3434 | ||
| 1039 | 6년 전 | 4392 | ||
| 1038 |
스카이누리
|
6년 전 | 2844 | |
| 1037 |
이동주전주
|
6년 전 | 2295 | |
| 1036 | 6년 전 | 3278 | ||
| 1035 | 7년 전 | 2428 | ||
| 1034 |
|
7년 전 | 6899 | |
| 1033 | 7년 전 | 1882 | ||
| 1032 |
|
7년 전 | 3716 | |
| 1031 | 7년 전 | 3313 | ||
| 1030 | 7년 전 | 4005 | ||
| 1029 |
|
7년 전 | 5382 | |
| 1028 |
하늘나누기
|
7년 전 | 2365 | |
| 1027 | 7년 전 | 4107 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기