정규표현식 소모임 창설을 축하합니다. (비밀번호 규칙 정규식 포함) 정보
정규표현식 소모임 창설을 축하합니다. (비밀번호 규칙 정규식 포함)본문
첫 글인데 정규표현식 하나 올리고 가겠습니다.
작년에 프로젝트하면서 비밀번호 규칙에 관한 정규식을 작성할 일이 있어서 만든 코드입니다.
/**
* @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
5
댓글 7개
첫글 감사 드리구요. 눈이 침침하여 나중에 보겠습니다. 하하~
@리자 게시글 작성할 때 소스코드 하이라이트 하는 법을 몰라서 ^^;; 이거 뭐 방법없습니까?
@gshn 차차 해결해야겠습니다.
지금 쓰는 highlight 플러그인이 오래되어서요. ㅎ
지금 쓰는 highlight 플러그인이 오래되어서요. ㅎ
감사합니다.
이 게시판은 소스 미학주의를 지향하는 분들의 모임이네요.
아름답네요. ㅎㅎㅎ
[...code...]~[.../code...] 로 묶으시면 하이라이팅 됩니다. ㅎㅎㅎ
쩜 세개 빼구요.
[...code...]~[.../code...] 로 묶으시면 하이라이팅 됩니다. ㅎㅎㅎ
쩜 세개 빼구요.
오오, ☆☆ 코드코드, 끄저끄적 ^^