예시코드
<?php
function validatePassword($password) {
// 최소 길이
$minLength = 8;
// 정규 표현식
$hasUppercase = preg_match('/[A-Z]/', $password);
$hasLowercase = preg_match('/[a-z]/', $password);
$hasDigit = preg_match('/\d/', $password);
$hasSpecialChar = preg_match('/[\W_]/', $password);
//특정 특수문자
//$hasSpecialChar = preg_match('/[!@#$%^&*()_+]/', $password);
if (strlen($password) < $minLength) {
return "비밀번호는 최소 {$minLength}자 이상이어야 합니다.";
}
if (!$hasUppercase) {
return "비밀번호는 대문자를 포함해야 합니다.";
}
if (!$hasLowercase) {
return "비밀번호는 소문자를 포함해야 합니다.";
}
if (!$hasDigit) {
return "비밀번호는 숫자를 포함해야 합니다.";
}
if (!$hasSpecialChar) {
return "비밀번호는 특수 문자를 포함해야 합니다.";
}
return "비밀번호가 유효합니다.";
}
// 예시
$password = "Test@1234";
echo validatePassword($password);
?>
검증조건
- 최소 길이
- 대문자 포함 여부
- 소문자 포함 여부
- 숫자 포함 여부
- 특수 문자 포함 여부
서버측 검증
함수설명
| 함수 | 설명 |
|---|
$minLength | 비밀번호의 최소 길이를 정의합니다. |
preg_match | 문자열이 정규 표현식과 일치하는지 검사하고, 일치하는 경우 결과를 변수에 저장합니다. |
정규표현식 설명
| 정규 표현식 | 설명 |
|---|
| 대문자 | [A-Z] |
| 소문자 | [a-z] |
| 숫자 | \d |
| 특수 문자 | [\W_] (비문자, 또는 언더스코어) |
실제 적용예시
필터링 단계마다 있는 if문 안에 $checkPassword함수에 값을 달리하여 무엇이 문제인지를 파악할 수 있습니다.
서버측
<?php
function CheckPassword($password) {
// 최소 길이
$minLength = 8;
// 정규 표현식
$hasUppercase = preg_match('/[A-Z]/', $password);
$hasLowercase = preg_match('/[a-z]/', $password);
$hasDigit = preg_match('/\d/', $password);
$hasSpecialChar = preg_match('/[\W_]/', $password);
//특정 특수문자
//$hasSpecialChar = preg_match('/[!@#$%^&*()_+]/', $password);
if (strlen($password) < $minLength) {
echo "비밀번호는 최소 {$minLength}자 이상이어야 합니다.";
$checkPassword="a";
return $checkPassword;
}
if (!$hasUppercase) {
echo "비밀번호는 대문자를 포함해야 합니다.";
$checkPassword="b";
return $checkPassword;
}
if (!$hasLowercase) {
echo "비밀번호는 소문자를 포함해야 합니다.";
$checkPassword="c";
return $checkPassword;
}
if (!$hasDigit) {
echo "비밀번호는 숫자를 포함해야 합니다.";
$checkPassword="d";
return $checkPassword;
}
if (!$hasSpecialChar) {
echo "비밀번호는 특수 문자를 포함해야 합니다.";
$checkPassword="e";
return $checkPassword;
}
echo "비밀번호가 유효합니다.";
$checkPassword="True";
return $checkPassword;
}
?>
클라이언트 측
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<form action="" method=get>
<input type="text" name=a>
</form>
</body>
</html>
<?php
$a=$_GET['a'];
$b=CheckPassword($a);
if($b=="True"){
//TEST통과 알람
echo "<script>alert(\"TEST Success\")</script>";
}
?>