반응형
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 자주 하는 실수
·
· 한글 매치 시
· 정규식 메타문자 이스케이프 안 함 (
· str_replace로 충분한데 정규식 사용 (성능 ↓)
^·$ 빼먹어 부분 매치를 전체로 착각· 한글 매치 시
/u 플래그 누락 → 깨질 수 있음· 정규식 메타문자 이스케이프 안 함 (
.·?·+...)· str_replace로 충분한데 정규식 사용 (성능 ↓)
핵심 한 줄 요약
preg_match()정규식으로 패턴 매칭 검사
/ ... /정규식의 양 끝 구분자
^ / $시작 / 끝 앵커
[0-9]+"숫자 한 자 이상"의 패턴
반환1/0/false (매치/불일치/오류)
$matches3번째 인자로 매치 결과 받기
한글 매치/u 플래그 + [가-힣]
반응형
'php' 카테고리의 다른 글
| PHP form2 + view — TEXTAREA 입력과 줄바꿈 처리 완전 정리 (0) | 2026.06.17 |
|---|---|
| PHP form + view — 폼 입력 → POST → 화면 출력 완전 정리 (0) | 2026.06.17 |
| PHP mb_convert_encoding — 문자열 인코딩 변환 완전 정리 (0) | 2026.06.16 |
| PHP header Location — 페이지 리다이렉트 완전 정리 (0) | 2026.06.16 |
| PHP pathinfo — 파일 경로의 디렉토리·이름·확장자 추출 완전 정리 (0) | 2026.06.16 |
왕진 블로그

댓글