본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

PHP preg_match — 정규식 패턴 검사 완전 정리

by 왕진 2026. 6. 16.
반응형

 

 

Web Development · PHP preg_match

PHP preg_match —
정규식으로 문자열 패턴 검사

"첫 글자가 숫자인가?" 같은 문자 패턴 매칭의 표준 도구
시작 오늘 분석할 코드
<?php $number = "123456"; if(preg_match("/^[0-9]+/", $number)){ // "첫 글자가 숫자(0~9)로 시작하는가?" print "숫자입니다!"; }else{ print "숫자 이외의 문자입니다."; } ?>
<?php $input = "abc123"; if(preg_match("/^[a-zA-Z]/", $input)) { // 첫 글자가 영문자인지 검사 print "첫 글자가 문자입니다!"; } else { print "첫 글자가 문자가 아닙니다."; } ?>

두 코드 모두 정규식의 첫 글자 검사 패턴이다 — 형식만 다르고 결과는 비슷.

용어 용어 정리
preg_match()정규식으로 패턴 매칭 검사
정규식 (regex)문자열 패턴을 표현하는 미니 언어
/ ... /정규식의 시작과 끝 구분자
^문자열의 시작
$문자열의 끝
[0-9]숫자 한 글자 (문자 클래스)
+한 번 이상 반복
반환값1 (매치) / 0 (불일치) / false (오류)

1 정규식 기본 기호
기호 의미
^ 문자열 시작 ^abc = "abc로 시작"
$ 문자열 끝 abc$ = "abc로 끝"
. 아무 한 글자 a.c = "abc, axc..."
* 0번 이상 반복 ab* = "a, ab, abb..."
+ 1번 이상 반복 ab+ = "ab, abb..." (a만은 X)
? 0 또는 1번 colou?r = "color, colour"
[ ] 문자 집합 [abc] = a, b, c 중 하나
[a-z] 범위 a부터 z까지
\d 숫자 = [0-9] "1234"
\w 단어 글자 = [a-zA-Z0-9_]  
\s 공백류 스페이스, 탭, 줄바꿈

2 패턴 분석 — /^[0-9]+/
/^[0-9]+/ │ │ │ │ │ └ 한 번 이상 반복 │ └─── 0~9 중 한 글자 (문자 클래스) └────── 문자열 시작에서 → "문자열 시작 직후에 1개 이상의 숫자가 있는가?"
$(끝)이 없으므로 "12abc"도 매치된다 (앞에 숫자만 있으면 OK). 전체가 숫자만이려면 /^[0-9]+$/로 끝까지 검사.

3 자주 쓰이는 패턴
// 모두 숫자만 preg_match('/^[0-9]+$/', $s) // 영문자만 preg_match('/^[a-zA-Z]+$/', $s) // 영문 + 숫자만 (영숫자) preg_match('/^[a-zA-Z0-9]+$/', $s) // 이메일 (간단) preg_match('/^[\w.-]+@[\w.-]+\.[a-z]{2,}$/i', $s) // 핸드폰 번호 (한국) preg_match('/^010-\d{4}-\d{4}$/', $s) // 한글만 preg_match('/^[가-힣]+$/u', $s)

 

반응형

 

4 매치 결과 받기
if (preg_match('/abc(\d+)/', "abc123def", $matches)) { print $matches[0]; // "abc123" — 전체 매치 print $matches[1]; // "123" — 첫 캡처 그룹 }

5 실무 패턴 — 입력 검증
// 회원가입 폼 검증 function validateNick($nick) { // 영숫자 + 한글, 2-20자 return preg_match('/^[\w가-힣]{2,20}$/u', $nick); } function validatePhone($phone) { return preg_match('/^01[016-9]-\d{3,4}-\d{4}$/', $phone); }

6 자주 하는 실수
· ^·$ 빼먹어 부분 매치를 전체로 착각
· 한글 매치 시 /u 플래그 누락 → 깨질 수 있음
· 정규식 메타문자 이스케이프 안 함 (.·?·+...)
· str_replace로 충분한데 정규식 사용 (성능 ↓)

핵심 한 줄 요약

preg_match()정규식으로 패턴 매칭 검사
/ ... /정규식의 양 끝 구분자
^ / $시작 / 끝 앵커
[0-9]+"숫자 한 자 이상"의 패턴
반환1/0/false (매치/불일치/오류)
$matches3번째 인자로 매치 결과 받기
한글 매치/u 플래그 + [가-힣]
반응형

댓글