Web Dev - 정규표현식을 이용한 로그인 기능

이태현·2025년 5월 26일

Web 개발

목록 보기
3/53
post-thumbnail

로그인 페이지

index.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>로그인 페이지</title>
</head>
<body>
    <h1>로그인 화면 구성하기</h1>
    <form action="login_ok.php" method="POST">
        아이디 : <input type="text" id="user_id" name="user_id" placeholder="아이디를 입력해 주세요." required autocomplete="off" autofocus>
        비밀번호 : <input type="password" id="user_pw" name="user_pw" placeholder="비밀번호를 입력해 주세요." required>
        <button>로그인</button>
    </form>
</body>
</script>
</html>
  1. GET방식을 POST로 변경하였습니다.
    -전에 GET방식을 썼던 이유는 URL에 데이터가 같이 포함되는 전달되는지 확인
    -POST방식으로 바꾼 이유는 Log-in은 민감한 개인정보이기 때문에 보안성을 높히기 위함

로그인 로직 - 정규표현식

login_ok.php

<?php

$id = $_POST["user_id"];
$pw = $_POST["user_pw"];

$space_pattern = "/\s{1,}/";
$kor_pattern = "/[가-힣]/";
$special_pattern = "/[`~!@#$%^&*,.|\\\'\";:\/?^=^+_()<>\[\]\{\}]/";

if(preg_match($space_pattern,$id)){
    echo "<script>alert('공백이 존재하네요. 다시 입력해 주세요.!');
    location.href='./index.php';
    </script>";
}
if (preg_match($kor_pattern, $id)) {
    echo "<script>
    alert('한글은 입력 할 수 없습니다.');
    location.href='./index.php';
    </script>";
}
if (preg_match($special_pattern, $id)) {
    echo "<script>
    alert('특수문자가 포함되어 있습니다.');
    location.href='./index.php';
    </script>
    ";
}
if ($id == "admin" && $pw == "admin") {
    echo "<script>
    location.href='./admin_ok.php';
    </script>";
}
echo "<h1>일반 계정으로 로그인 하셨습니다.</h1><br>";
echo $id . "님 어서오세요^^";

정규표현식 (Regular Expressions)
※ 여러 정규표현식이 있지만 위에 코드에서 사용된 간단한 정규표현식만 설명하겠습니다.

  • 정의
    문자열에서 특정한 규칙을 가지는 문자열을 찾아냅니다.
    값을 찾으면 Ture(1), 못찾으면 False(0) 를 반환합니다.

ex) preg_match(찾을 패턴, 찾을 문자열)

$special_pattern = "/[`~!@#$%^&*,.|\\\'\";:\/?^=^+_()<>\[\]\{\}]/"; //특수문자를 찾습니다.
preg_match($special_pattern, $id); // 기존 문자열에서 특수문자(pattern)를 찾으면 1(true)을 반환.

논리 연산자 (Logical Operators)
※ 여러 논리연산자가 있지만 위에 코드에서 사용된 간단한 논리연산자만 설명하겠습니다.

  • 정의
    논리를 따져서, 참(ture)과 거짓(false)을 반환합니다.

ex) and연산자 (논리곱)

and==&&
둘은 정확히 같은 동작을 수행합니다.
-if 조건문을 사용하여 $id값과 $pw값이 모두 "admin"을 만족할 때 아래 코드를 실행 합니다.

if ($id == "admin" && $pw == "admin") {
    echo "<script>
    location.href='./admin_ok.php';
    </script>";
}
if ($id == "admin" and $pw == "admin") {
    echo "<script>
    location.href='./admin_ok.php';
    </script>";
}

location.href

  • 정의
    보통 JS(자바스크립트)에서 사용하고, 페이지를 이동해주는 기능을 수행합니다.
    페이지 이동을 원한다면 location.href='상대경로' 를 사용합니다.
    ex ) location.href='상대경로'
if ($id == "admin" and $pw == "admin") {
    echo "<script>
    location.href='./admin_ok.php';
    </script>";
}

로직 결과

1. 한글 정규식

$kor_pattern = "/[가-힣]/";
if (preg_match($kor_pattern, $id)) {
    echo "<script>
    alert('한글은 입력 할 수 없습니다.');
    location.href='./index.php';
    </script>";
}

결과
로그인 후

2. 공백 정규식

$space_pattern = "/\s{1,}/";
if(preg_match($space_pattern,$id)){
    echo "<script>alert('공백이 존재하네요. 다시 입력해 주세요.!');
    location.href='./index.php';
    </script>";
}

결과
로그인 후

3. 특수문자 정규식

$special_pattern = "/[`~!@#$%^&*,.|\\\'\";:\/?^=^+_()<>\[\]\{\}]/";
if (preg_match($special_pattern, $id)) {
    echo "<script>
    alert('특수문자가 포함되어 있습니다.');
    location.href='./index.php';
    </script>
    ";
}

결과
로그인 후

4. 관리자 계정 로그인

관리자 로직

if ($id == "admin" && $pw == "admin") {
    echo "<script>
    location.href='./admin_ok.php';
    </script>";
}

관리자 계정 로그인 전
관리자 계정 로그인 후

5. 일반 계정 로그인

일반 계정 로직

echo "<h1>일반 계정으로 로그인 하셨습니다.</h1><br>";
echo $id . "님 어서오세요^^";

일반 계정 로그인 전
일반 계정 로그인 후

마무리

전에 if문만 썼을 때는 상당히 신경이 많이 쓰였는데 정규표현식 덕분에 그동안 생각이 많았던 부분들을 많이 해소할 수 있어서 좋았습니다. 다음에는 쿠키와 세션을 가지고 로그인과 로그아웃 기능을 만들어 볼 생각입니다. 감사합니다.

profile
이해하고 분석하고 지배한다

0개의 댓글