'ㄱ-힣'과 한글만 입력받게 하기
한글만 허용하도록(혹은 한글만 제한하는) 문자열을 검사할 때
ㄱ-힣 이라고 범위를 지정하는 경우를 볼 수 있는데
ㄱ는 유니코드 코드포인트가 12593, '가'는 44032로 상당히 멀리 떨어져 있기 때문에
그 사이에 있는 문자들도 포함하게 되어버린다.
만약 다음과 같은 코드로 한글만 허용토록 했다면(Java),
if(str.matches("^[ㄱ-힣]*$"))
유니코드에서 코드포인트가 저 범위 안에 들어 있는 '誤'같은 문자까지 입력이 가능하게 된다.
따라서 자음/모음만 낱으로 있는 부분과 가-힣 부분을 따로 써야 한다.
^[ㄱ-ㅎㅏ-ㅣ가-힣]*$
혹은 완전한 글자만 허용하려면
^[가-힣]*$
으로 정규식을 쓰면 된다.
UTF-8과의 인코딩 문제 등으로 안 될 경우에는,
^[\u3131-\u318E\uAC00-\uD7A3]*$
(ㄱ-ㆎ 가-힣)
(ㆎ는 아래애)
\u1100-\u11f9 범위의 조합형 자모도 있지만 이 포스팅에서는 생략.
※사용예시 (프로그래밍 언어에 따라 정규식을 /와 /로 묶어서 표현하는 경우가 있음)
*Java
*AS3.0
결론은 ㄱ-힣 범위를 쓰면 의도와 다른 결과가 나올 수 있다는 것입니다..