우리가 개발을 하다 보면 문자열을 다루는 일이 정말 많다.
회원가입 폼에서 이메일 형식을 검사하고, 로그에서 특정 패턴을 찾고,
또는 비밀번호 정책을 강제해야 할 때도 있다.
이 때 유용하게 쓰이는 도구가 바로 정규표현식(Regular Expression, Regex)이다.
코드 몇 줄만으로 문자열의 패턴을 정의하고 검사할 수 있기 때문에
프론트엔드, 백엔드, 클라이언트 앱 등 어떤 환경에서도 널리 사용된다.
이번 글에서는 정규표현식의 기본 개념과 자주 쓰는 문법,
그리고 내가 C# WinForms 프로젝트에서 실제로 적용한 비밀번호 정책 검사 코드를 공유한다.
- 정규표현식(Regex)이란?
정규표현식은 문자열 안에서 특정 패턴을 찾거나,
문자열이 해당 패턴에 맞는지를 검사하는 “문자열 패턴 언어”이다.
예를 들어:
- 숫자로만 이루어진 문자열 → ^\d+$
- 이메일 주소 → ^[\w\.-]+@[\w\.-]+\.\w+$
- 한글만 → ^[가-힣]+$
- 휴대폰 번호 010-XXXX-XXXX → ^010-\d{4}-\d{4}$
이처럼 간단한 문자부터 복잡한 조건까지 문자열 구조를 코드로 표현할 수 있다.
- 정규표현식 기초 문법 정리
자주 사용하는 문법만 간단히 정리하면 다음과 같다.
1. 문자 매칭
- . → 임의의 문자 1개
- \d → 숫자
- \w → 영문자 + 숫자 + _
- \s → 공백
2. 반복
- * → 0번 이상
- + → 1번 이상
- {n} → 정확히 n번
- {n,m} → n~m번 반복
3. 문자 집합
- [0-9] → 숫자
- [^0-9] → 숫자가 아닌 것
- [A-Za-z] → 영어 알파벳
- [^A-Za-z] → 영어 알파벳이 아닌 것
- [^A-Za-z0-9] → 특수 문자
4. 시작 / 종료 앵커
- ^ → 문자열 시작
- $ → 문자열 끝
정규식은 이 기본 규칙들을 조합해서 만든다.
- C# WinForms에서 Regex 사용하기
C#에서는 System.Text.RegularExpressions.Regex 클래스를 사용해 정규표현식을 처리한다.
WinForms 프로젝트에서도 자주 활용되며, 특히 다음과 같은 작업에 매우 유용하다.
- 회원가입/설정 화면에서 비밀번호, 이메일, 전화번호 검증
- 로그 텍스트에서 특정 패턴 추출
- 입력값 필터링 및 유효성 검사
이번에는 내가 실제로 WinForms 프로젝트에서 구현한 비밀번호 정책 검사 코드를 예제로 공유한다.
- 실제 WinForms 프로젝트에서 사용한 비밀번호 정규식
내 프로젝트에서는 다음 조건을 만족하는 비밀번호만 허용하도록 했다.
- 최소 8자 이상
- 대문자 1개 이상 포함
- 숫자 1개 이상 포함
- 특수문자 1개 이상 포함
이를 정규식으로 표현하면 아래와 같다.
using System.Text.RegularExpressions; // 사용해야 하는 네임스페이스 (정규 표현식)
// 8자 이상, 대문자, 숫자, 특수문자 포함
private static readonly Regex PasswordRegex =
new Regex(@"^(?=.*[A-Z])(?=.*[0-9])(?=.*[^A-Za-z0-9]).{8,}$", RegexOptions.Compiled);
// 비밀번호 정책 검사
if (!PasswordRegex.IsMatch(newPw))
{
MessageBox.Show(
"새 비밀번호는 최소 8자 이상이어야 하며, 대문자, 숫자, 특수문자를 포함해야 합니다.",
"입력 오류",
MessageBoxButtons.OK,
MessageBoxIcon.Warning
);
textBox_new_password.Focus();
return;
}
- 코드 설명
정규식 패턴을 하나씩 보면:
| 패턴 | 의미 |
| (?=.*[A-Z]) | 대문자 1개 이상 포함 |
| (?=.*[0-9]) | 숫자 1개 이상 포함 |
| (?=.*[^A-Za-z0-9]) | 특수문자 1개 이상 포함 |
| .{8,} | 전체 길이 8자 이상 |
이 정규식은 여러 조건을 하나의 문자열로 묶기 위해 Lookahead(전방 탐색) 기술을 사용했다.
이 방식을 사용하면 조건이 늘어나거나 바뀌어도 유지보수가 매우 편하다.
- WinForms 환경에서 정규식이 유용한 이유
1. UI 로직이 깔끔해짐
여러 if문을 작성하지 않아도 됨.
2. 재사용 가능
정규식을 static readonly로 선언하면
어떤 폼에서도 동일한 정책을 사용할 수 있다.
3. 조건 변경이 쉬움
예: 소문자도 필수로 하려면 (?=.*[a-z]) 한 줄 추가하면 됨.
4. 보안성 향상
사용자 입력값을 강력하게 제어할 수 있다.
- 정규식 검증 예시
| 입력 | 결과 | 이유 |
| abcd | X | 너무 짧음 |
| abcdABCD | X | 숫자 / 특수 문자 없음 |
| Abcd1234 | X | 특수 문자 없음 |
| Abcd1234! | O | 모든 조건 충족 |
- 마무리
정규표현식은 문자열 검증·검색·분석에서 매우 강력한 도구이다.
특히 WinForms 같은 데스크톱 UI 환경에서도 입력값의 유효성을 단 몇 줄로 검사할 수 있어 실전에서 자주 사용된다.
이번 글에서는 내가 실제로 사용했던 비밀번호 정책 검사 정규표현식 코드를 중심으로 설명했지만,
이 방식은 이메일, 전화번호, 학번, 주민번호 등 다른 검증 기능에도 그대로 적용할 수 있다.
정규표현식은 처음에는 낯설지만 몇 번 사용해 보면 “왜 이걸 미리 안 썼지?” 싶을 정도로 편리한 도구이니
WinForms 프로젝트를 한다면 적극 활용해보길 추천한다.