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