카테고리 없음

정규표현식(Regex) 완전 정복

ehdbs7908 2025. 12. 6. 09:12

우리가 개발을 하다 보면 문자열을 다루는 일이 정말 많다.
회원가입 폼에서 이메일 형식을 검사하고, 로그에서 특정 패턴을 찾고,

또는 비밀번호 정책을 강제해야 할 때도 있다.

 

이 때 유용하게 쓰이는 도구가 바로 정규표현식(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 프로젝트를 한다면 적극 활용해보길 추천한다.