본문 바로가기
PHP

[PHP] 입력값 검증 방법 (2) preg_match(), ctype 함수

by teamnova 2025. 3. 23.
728x90

 

안녕하세요, 

 

오늘은 php에서 입력값을 검증하는 방법인 preg_match()와 ctype 함수에 대해 알아보겠습니다. 

 

 

preg_match()

preg_match() 함수는 "정규 표현식(Regex, Regular Expression)"을 사용하여 문자열이 특정 패턴과 일치하는지 검사하는 함수입니다.

 

<문법>

preg_match(정규식, 문자열)

- 일치하면 1 반환, 일치하지 않으면 0 반환
- 오류가 발생하면 false 반환

 

 

<preg_match() 사용 예시>

 

1. 이메일 검증

$email1 = "user@example.com";
$email2 = "userexample.com";  // '@' 없음
$pattern = "/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/";

if (preg_match($pattern, $email1)) {
    echo "이메일 1 - 성공: 올바른 이메일 형식입니다.<br>";
} else {
    echo "이메일 1 - 실패: 잘못된 이메일 형식입니다.<br>";
}

if (preg_match($pattern, $email2)) {
    echo "이메일 2 - 성공: 올바른 이메일 형식입니다.<br>";
} else {
    echo "이메일 2 - 실패: 잘못된 이메일 형식입니다.<br>";
}

 

 

결과

이메일 1 - 성공: 올바른 이메일 형식입니다.
이메일 2 - 실패: 잘못된 이메일 형식입니다.

 

 

2. 전화번호 검증 : 정규 표현식을 활용하여 숫자 개수와 하이픈(-) 유무까지 검증 가능

$phone1 = "010-1234-5678";
$phone2 = "1234-5678"; // 010 없음

$pattern = "/^01[0-9]-\d{3,4}-\d{4}$/";

if (preg_match($pattern, $phone1)) {
    echo "phone1 성공: 올바른 전화번호 형식입니다.<br>";
} else {
    echo "phone1 실패: 잘못된 전화번호 형식입니다.<br>";
}

if (preg_match($pattern, $phone2)) {
    echo "phone2 성공: 올바른 전화번호 형식입니다.<br>";
} else {
    echo "phone2 실패: 잘못된 전화번호 형식입니다.<br>";
}

 

결과

phone1 성공: 올바른 전화번호 형식입니다.
phone2 실패: 잘못된 전화번호 형식입니다.

 

 

3. 비밀번호 검증 (최소 8자, 대문자/소문자/숫자/특수문자 포함)

 

$password1 = "P@ssw0rd!";
$password2 = "P@srd!";
$pattern = "/^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/";

if (preg_match($pattern, $password1)) {
    echo "password1 형식에 맞는 비밀번호입니다.<br>";
} else {
    echo "password1 비밀번호는 8자 이상, 대소문자, 숫자, 특수문자를 포함해야 합니다.<br>";
}


if (preg_match($pattern, $password2)) {
    echo "password2형식에 맞는 비밀번호입니다.<br>";
} else {
    echo "password2 비밀번호는 8자 이상, 대소문자, 숫자, 특수문자를 포함해야 합니다.<br>";
}

 

결과

password1 형식에 맞는 비밀번호입니다.
password2 비밀번호는 8자 이상, 대소문자, 숫자, 특수문자를 포함해야 합니다.

 

 

 

ctype 함수

PHP에서는 ctype_ 접두사를 사용하는 다양한 ctype 함수들을 제공하고 있습니다.

ctype 함수들은 입력값이 특정한 문자 유형(숫자, 알파벳, 공백 등)인지 검사하는 역할을 합니다.  

<문법>

ctype_XXX(문자열)

- 문자열이 해당 조건을 만족하면 true 반환, 그렇지 않으면 false 반환

 

 

<ctype 함수 종류 및 사용예시>

함수명 설명 사용예시
ctype_alnum() 영숫자(A-Z, a-z, 0-9)만 포함 여부 "abc123"   true    
"abc@"    false 
ctype_alpha() 알파벳(A-Z, a-z)만 포함 여부 "Hello"   true 
"Hello123"   false 
ctype_digit() 숫자(0-9)만 포함 여부 "12345"   true 
"123a"   false 
ctype_xdigit() 16진수 문자(0-9, A-F, a-f)만 포함 여부 "1F3A"   true 
"G123"   false 
ctype_lower() 소문자(a-z)만 포함 여부 "hello"   true 
"Hello"   false 
ctype_upper() 대문자(A-Z)만 포함 여부 "HELLO"   true 
"Hello"   false 
ctype_space() 공백(스페이스, 탭, 줄바꿈)만 포함 여부 " "   true 
" a "   false 
ctype_cntrl() 제어 문자(ASCII 0~31)만 포함 여부 "\n\t"   true 
"abc"   false 
ctype_graph() 출력 가능한 문자(공백 제외)만 포함 여부 "Hello!"   true 
"Hello "   false 
ctype_print() 출력 가능한 문자(공백 포함)만 포함 여부 "Hello "   true 
"\nHello"   false 
ctype_punct() 특수문자만 포함 여부 "!@#$%"   true 
 "abc!"      false 
ctype_ascii() ASCII 문자(0-127)만 포함 여부 "Hello"  true 
"안녕하세요"    false