정규표현식 소모임 창설을 축하합니다. (비밀번호 규칙 정규식 포함) > 정규표현식

정규표현식

정규표현식 소모임 창설을 축하합니다. (비밀번호 규칙 정규식 포함) 정보

정규표현식 소모임 창설을 축하합니다. (비밀번호 규칙 정규식 포함)

본문

첫 글인데 정규표현식 하나 올리고 가겠습니다.

작년에 프로젝트하면서 비밀번호 규칙에 관한 정규식을 작성할 일이 있어서 만든 코드입니다.



   
/**
 * @namespace User:passwordValidation
 * 입력 받은 패스워드를 정규식으로 검증한다.
 */
public function passwordValidation($password):? string
{
    $regex = [
        "/^(?=.*[A-Za-z])(?=.*\d)(?=.*[`~!@#$%*?&\^\(\)\-_\+\=])[A-Za-z\d`~!@#$%*?&\^\(\)\-_\+\=]{8,}$/",
        "/(abc|bcd|cde|def|efg|fgh|ghi|hij|ijk|jkl|klm|lmn|mno|nop|opq|pqr|qrs|rst|stu|tuv|uvw|vwx|wxy|xyz)/",
        "/(ABC|BCD|CDE|DEF|EFG|FGH|GHI|HIJ|IJK|JKL|KLM|LMN|MNO|NOP|OPQ|PQR|QRS|RST|STU|TUV|UVW|VWX|WXY|XYZ)/",
        "/(012|123|234|345|456|567|678|789)/",
        "/(\w)\1\1\1*/"
    ];
    $message = null;
 
    foreach ($regex as $i => $pattern) {
        if ($i == 0 && !preg_match($pattern, $password)) {
            $message = '숫자, 영문자, 특수문자가 최소 한 글자씩 포함한 8자리 이상의 문자열만 가능합니다.';
            break;
        } else if ($i > 0 && preg_match($pattern, $password)) {
            $message = match($i) {
                1 => '연속된 소문자가 3자리 연속해서 사용될 수 없습니다. 예 (abc, xyz)',
                2 => '연속된 대문자가 3자리 연속해서 사용될 수 없습니다. 예 (ABC, XYZ)',
                3 => '연속된 숫자 3자리 연속해서 사용될 수 없습니다. 예 (123, 789)',
                4 => '똑같은 문자가 3자리 연속해서 사용될 수 없습니다. 예 (aaa, 111)'
            };
            break;
        }
    }
    return $message;
}


요구 조건은 아래와 같았습니다.

 

1. 최소 한 글자의 숫자가 포함되어야함
2. 최소 한 글자의 영문자가 포함되어야함
3. 최소 한 글자의 특수문자[`~!@#$%^&*()-_=+]가 포함되어야함
4. 최소 8 글자이상의 문자열이어야함
5. 연속된 소문자가 3자리 연속해서 사용될 수 없음
6. 연속된 대문자가 3자리 연속해서 사용될 수 없음
7. 연속된 숫자가 3자리 연속해서 사용될 수 없음
8. 똑같은 문자가 3자리 연속해서 사용될 수 없음
9. 기존 비밀번호와 동일하게 사용할 수 없음

 

좀 더 아름다운 방식이 있었을거 같긴한데 제가 할 수 있는 최선의 방식이었습니다.

 

추천
5

댓글 7개

전체 30 |RSS
정규표현식 내용 검색

회원로그인

진행중 포인트경매

  1. 참여37 회 시작21.10.21 13:00 종료21.10.28 13:00
(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIR SOFT