'ㄱ-힣'과 한글만 입력받게 하기


한글만 허용하도록(혹은 한글만 제한하는) 문자열을 검사할 때

ㄱ-힣 이라고 범위를 지정하는 경우를 볼 수 있는데

ㄱ는 유니코드 코드포인트가 12593,  '가'는 44032로 상당히 멀리 떨어져 있기 때문에

그 사이에 있는 문자들도 포함하게 되어버린다.


만약 다음과 같은 코드로 한글만 허용토록 했다면(Java),

if(str.matches("^[ㄱ-힣]*$"))

유니코드에서 코드포인트가 저 범위 안에 들어 있는 '誤'같은 문자까지 입력이 가능하게 된다.





따라서 자음/모음만 낱으로 있는 부분과 가-힣 부분을 따로 써야 한다.

 ^[ㄱ-ㅎㅏ-ㅣ가-힣]*$

혹은 완전한 글자만 허용하려면

 ^[가-힣]*$

으로 정규식을 쓰면 된다.



UTF-8과의 인코딩 문제 등으로 안 될 경우에는,

^[\u3131-\u318E\uAC00-\uD7A3]*$

(ㄱ-ㆎ 가-힣)

(ㆎ는 아래애)



\u1100-\u11f9 범위의 조합형 자모도 있지만 이 포스팅에서는 생략.






※사용예시 (프로그래밍 언어에 따라 정규식을 /와 /로 묶어서 표현하는 경우가 있음)


*Java


*AS3.0





결론은 ㄱ-힣 범위를 쓰면 의도와 다른 결과가 나올 수 있다는 것입니다..


+ Recent posts