gshn

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

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

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

[code]

   

/**

 * @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;

}

[/code]

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

 

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

 

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

 

|

댓글 7개

첫글 감사 드리구요. 눈이 침침하여 나중에 보겠습니다. 하하~
@리자 게시글 작성할 때 소스코드 하이라이트 하는 법을 몰라서 ^^;; 이거 뭐 방법없습니까?
@gshn 차차 해결해야겠습니다.
지금 쓰는 highlight 플러그인이 오래되어서요. ㅎ
감사합니다.
이 게시판은 소스 미학주의를 지향하는 분들의 모임이네요.
아름답네요. ㅎㅎㅎ

[...code...]~[.../code...] 로 묶으시면 하이라이팅 됩니다. ㅎㅎㅎ
쩜 세개 빼구요.
오오, ☆☆ 코드코드, 끄저끄적 ^^
댓글을 작성하시려면 로그인이 필요합니다. 로그인

정규표현식

+
제목 글쓴이 날짜 조회
4년 전 조회 1,438
4년 전 조회 1,330
4년 전 조회 1,633
4년 전 조회 1,794
4년 전 조회 1,071
5년 전 조회 1,944
5년 전 조회 1,267
5년 전 조회 1,386
5년 전 조회 1,327
5년 전 조회 1,517
5년 전 조회 1,233
5년 전 조회 1,204
5년 전 조회 1,091
5년 전 조회 1,624
5년 전 조회 1,095
5년 전 조회 1,469
5년 전 조회 1,585
5년 전 조회 1,248
5년 전 조회 1,450
5년 전 조회 1,443
5년 전 조회 1,609
5년 전 조회 1,421
5년 전 조회 1,534
5년 전 조회 1,157
5년 전 조회 1,281
4년 전 조회 1,560
4년 전 조회 1,490
4년 전 조회 1,496
4년 전 조회 1,235
4년 전 조회 1,419
🐛 버그신고