개발 메모장

[JavaScript] 비밀번호 정규식 및 유효성 검사 본문

Java Script

[JavaScript] 비밀번호 정규식 및 유효성 검사

yyyyMMdd 2023. 11. 22. 15:31
728x90

#. 강력한 보안을 위해 비밀번호 정규식은 필수적으로 정의가 필요합니다.

 

#. 비밀번호 정규식

  • 영문(대소문자) + 숫자 + 특수문자가 각 1회 이상 입력되어 있고 10자리 이상
const regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()_+~`\-={}[\]:;"'<>,.?/\\]).{10,}$/;

 

  • (?=.*[a-z]) : 소문자가 하나 이상 있는지 확인
  • (?=.*[A-Z]) : 대문자가 하나 이상 있는지 확인
  • (?=.*\d) : 숫자가 하나 이상 있는지 확인
  • (?=.*[!@#$%^&*()_+~`\-={}[\]:;"'<>,.?/\\]) : 특수문자가 하나 이상 있는지 확인
  • .{10,} : 입력한 문자가 10회 이상인지 확인 ( 필요에 따라 비밀번호 최소, 최대 길이 수정 / 앞 - 최소길이, 뒤 - 최대길이)

#. 유효성 검사

const password = $('#password').val();
const id = $('#id').val();

const SamePw = 0;    	// 동일문자 카운트
const SamePwPlus = 0; 	// 연속성 카운트 +
const SamePwMinus = 0; 	// 연속성 카운트 -

for(var i = 0; i < password.length; i++) {
    var chr_pw = password.charAt(i);
    var chr_pw1 = password.charAt(i+1);
    var chr_pw2 = password.charAt(i+2);

     // 동일문자 카운트
     if(chr_pw === chr_pw1) {
         SamePw = SamePw + 1
     }

     // 연속성 카운트 +
     if(chr_pw.charCodeAt(0) - chr_pw1.charCodeAt(0) === 1 
     	&& chr_pw1.charCodeAt(0) - chr_pw2.charCodeAt(0) === 1) {
         SamePwPlus = SamePwPlus + 1
     }

     // 연속성 카운트 -
     if(chr_pw.charCodeAt(0) - chr_pw1.charCodeAt(0) === -1 
     	&& chr_pw1.charCodeAt(0) - chr_pw2.charCodeAt(0) === -1) {
         SamePwMinus = SamePwMinus + 1
     }
}

// 연속된 문자열 3자 이상 사용불가(123, 321, abc, cba 등)
if(SamePwPlus > 1 || SamePwMinus > 1 ) {
    alert("");
    return;
 }

// 동일문자 3번 이상 사용불가(111, 222, aaa, bbb 등)
// \\1을 추가할 때마다 1회씩 증가
if(samePw > 1) {
    alert("");
    return
}

 

#. 개별 유효성 검사

 

  • 비밀번호에 아이디를 포함 돼있는 경우에 대한 검사
if(password.search(id) > -1) {
	alert("아이디를 비밀번호에 포함시키지 마세요!");
	return
}

 

  • 비밀번호에 한글을 입력하는 경우에 대한 검사
const hangulCheck = /[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/;

if(hangulCheck.test(pw)) {
	alert("한글 사용 금지");
	return
}

 

  • 비밀번호에 공백이 있는 경우에 대한 검사
if(password.search(/\s/) != -1) {
	alert("공백 사용 금지");
	return
}

 

  • 비밀번호 길이에 대한 검사
if(password.length < 10) {
	alert("비밀번호는 10자리 이상!");
	return
}

 

  • 동일 문자 사용에 대한 검사
if(/(\w)\1\1\1/.test(pw)) {
	alert('같은 문자를 4번 이상 사용하실 수 없습니다.');
	return
}

 

 

===========================================================
틀린 내용이 있거나 이견 있으시면 언제든 가감 없이 말씀 부탁드립니다!

===========================================================

728x90