본문 바로가기

정규식 한글 패턴 매칭 완벽 가이드 - 가-힣부터 자음 모음, 실전 검증 예제까지 총정리

이름 입력 검증에 \w를 썼다가 한글이 안 잡혀 당황하셨나요? [가-힣]의 정확한 의미부터 자모 매칭, 자바스크립트와 파이썬의 차이, macOS 자소 분리 문제까지 실무에서 바로 쓰는 패턴을 정리했습니다.


정규식 한글 패턴 매칭 완벽 가이드 - 가-힣부터 자음 모음, 실전 검증 예제까지 총정리

이름 입력란에 한글만 받으려고 \w를 썼는데 영문만 통과되고 한글은 전부 튕겨 나간 경험, 개발을 해본 분이라면 한 번쯤 있으실 겁니다. 영문 위주로 설계된 정규식 문법에서 정규식 한글 패턴 매칭은 별도의 유니코드 범위 지정이 필요하기 때문입니다. 원리만 이해하면 어렵지 않습니다. 실무에서 바로 복사해 쓸 수 있는 패턴과 함께 차근차근 정리해 보겠습니다.

한글 매칭의 기본, [가-힣] 패턴

완성된 한글 글자를 매칭하는 가장 표준적인 패턴은 [가-힣]입니다. 유니코드에서 한글 완성형 음절은 U+AC00(가)부터 U+D7A3(힣)까지 총 11,172자가 연속으로 배치되어 있습니다. 그래서 범위 지정 하나로 모든 완성형 한글을 잡아낼 수 있습니다.

  • [가-힣] : 완성형 한글 1글자 매칭
  • [가-힣]+ : 연속된 한글 1글자 이상 매칭
  • ^[가-힣]+$ : 문자열 전체가 한글로만 구성됐는지 검사

주의할 점이 하나 있습니다. [가-힣]완성형 음절만 매칭합니다. 채팅에서 흔히 쓰는 ㅋㅋㅋ, ㅠㅠ 같은 자음이나 모음 단독 입력은 이 범위에 포함되지 않습니다.

자음과 모음까지 잡아내는 범위 확장

자모 단독 문자는 별도의 유니코드 영역에 있습니다. 자음은 [ㄱ-ㅎ], 모음은 [ㅏ-ㅣ] 범위로 지정합니다. 세 범위를 합치면 한글과 관련된 입력 대부분을 커버할 수 있습니다.

패턴유니코드 범위매칭 대상예시
[가-힣]U+AC00 ~ U+D7A3완성형 음절 11,172자가, 나, 힣
[ㄱ-ㅎ]U+3131 ~ U+314E자음 단독ㅋ, ㅎ, ㄲ
[ㅏ-ㅣ]U+314F ~ U+3163모음 단독ㅏ, ㅠ, ㅢ
[ㄱ-ㅎㅏ-ㅣ가-힣]위 세 범위 결합자모 + 완성형 전체ㅋㅋ, 안녕
한글 정규식 오류의 대부분은 문법 실수가 아니라 범위 선택의 문제입니다. 이름 검증에는 완성형만, 채팅 필터링에는 자모까지, 목적에 따라 범위를 다르게 골라야 정확하게 동작합니다.

자바스크립트와 파이썬, 언어별 차이점

같은 패턴이라도 언어에 따라 동작이 다릅니다. 특히 \w의 처리 방식이 갈립니다.

자바스크립트

자바스크립트의 \w[A-Za-z0-9_]와 동일해서 한글을 매칭하지 못합니다. 대신 u 플래그와 함께 유니코드 속성 이스케이프를 쓸 수 있습니다. /\p{Script=Hangul}/u는 완성형과 자모를 모두 포함해 한글 스크립트 전체를 매칭합니다.

파이썬

파이썬 3의 re 모듈은 기본이 유니코드 모드라 \w가 한글도 매칭합니다. 다만 한글만 골라내려면 결국 [가-힣] 같은 명시적 범위가 필요합니다. 영문과 숫자까지 함께 통과되기 때문입니다.

참고: 자바스크립트의 \p{Script=Hangul}은 ES2018 이상에서 지원되며, 반드시 u 플래그를 붙여야 합니다. 플래그 없이 쓰면 문법 오류가 발생하거나 의도와 다르게 동작합니다.

실무에서 바로 쓰는 검증 패턴 5가지

복사해서 바로 쓸 수 있는 실전 패턴입니다.

  • 이름 검증 : ^[가-힣]{2,5}$ - 2~5글자 한글 이름만 허용
  • 한글 포함 여부 : [가-힣] - 문자열에 한글이 하나라도 있는지 확인
  • 한글 + 공백 : ^[가-힣\s]+$ - 주소, 상호명처럼 띄어쓰기가 있는 입력
  • 닉네임 검증 : ^[가-힣a-zA-Z0-9]{2,10}$ - 한글, 영문, 숫자 조합 2~10자
  • 한글 제거 : [ㄱ-ㅎㅏ-ㅣ가-힣]을 빈 문자열로 치환

이런 패턴은 웹 유틸리티를 만들 때 특히 자주 쓰입니다. 예를 들어 학점 계산기처럼 과목명은 한글로, 학점은 숫자로 받아야 하는 도구라면 입력 단계에서 정규식으로 형식을 걸러야 계산 오류를 막을 수 있습니다. 또 모바일 입력 폼을 점검할 때는 화면 크기 확인 도구로 테스트 기기의 해상도를 먼저 파악해 두면 검증 메시지가 잘리는 문제까지 함께 잡을 수 있습니다.

팁: 검증 패턴에는 반드시 ^$ 앵커를 붙이세요. 앵커가 없으면 "abc홍길동xyz"처럼 한글이 일부만 포함된 문자열도 통과됩니다. 실무에서 가장 흔한 실수입니다.

한글 정규식이 안 먹힐 때 점검할 것들

패턴이 분명히 맞는데 매칭이 안 될 때가 있습니다. 대표적인 원인 두 가지를 확인해 보세요.

1. macOS 자소 분리 문제

macOS에서 만든 파일명이나 일부 시스템의 문자열은 NFD 방식으로 저장됩니다. 눈에는 "한글"로 보여도 내부적으로는 초성, 중성, 종성이 분리된 조합형 자모(U+1100 영역)라서 [가-힣]에 매칭되지 않습니다. 자바스크립트라면 normalize('NFC')로 먼저 정규화한 뒤 매칭하면 해결됩니다.

2. 인코딩 불일치

파일이나 응답 데이터가 UTF-8이 아닌 EUC-KR로 인코딩된 경우에도 유니코드 범위 매칭이 깨집니다. 데이터를 읽는 시점에 인코딩을 UTF-8로 통일하는 것이 먼저입니다.

정리하면 두 가지만 기억하시면 됩니다. 첫째, 지금 만들고 있는 입력 폼의 검증식에 ^[가-힣]+$ 형태로 앵커를 포함했는지 확인하세요. 둘째, 한글 매칭이 이유 없이 실패한다면 normalize('NFC')부터 적용해 보세요. 이 둘만 챙겨도 한글 입력 처리에서 발생하는 문제의 대부분은 사라집니다.

3일 무료체험큰손탐지기, 지금 바로 시작하세요

설치 없이 웹에서 바로 사용 가능 · PC & 모바일 지원

무료체험 시작
카카오톡 상담