첫 글인데 정규표현식 하나 올리고 가겠습니다.
작년에 프로젝트하면서 비밀번호 규칙에 관한 정규식을 작성할 일이 있어서 만든 코드입니다.
[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개
게시글 목록
| 번호 | 제목 |
|---|---|
| 98 | |
| 97 | |
| 91 | |
| 87 | |
| 80 | |
| 76 | |
| 75 | |
| 72 | |
| 71 | |
| 70 | |
| 69 | |
| 68 | |
| 62 | |
| 61 | |
| 60 | |
| 57 | |
| 55 | |
| 54 | |
| 49 | |
| 40 | |
| 36 | |
| 33 | |
| 32 | |
| 31 | |
| 29 | |
| 21 | |
| 11 | |
| 8 | |
| 4 | |
| 1 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기