C#

C# 정규화로 비밀번호 입력 조건 만들기

리콜 2022. 12. 3. 16:38

로그인하는 시스템을 만들때에 비밀번호를 입력한다. 이때 비밀번호 조건을 만들기위해서  if문을 이용하여 조건을 만들었었다. 하지만 정규화를 사용한다면 조건을 빠르고 쉽게 확인할 수 있다.

 정규화를 사용하기 위해서는 먼저 using System.Text.RegularExpressions; 을 사용하여야 한다. 

Regex regex = new Regex(@"^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^*-]).{8,}$");

이런식으로 Regex객체를 생성하면서 조건을 넣어주면 된다. 생성자 매개변수로 조건을 넣어주게 되는데 간단히 살펴보자면

. : 하나의 문자를 의미한다.
예제 : A.B 패턴은 AAB(일치), A1B(일치), AB(불일치), AAB(불일치) 이다.
 
? : 아무문자도 없거나 하나의 문자가 있는 것을 의미한다.

예제 : A?B 패턴은 AAB(일치), AB(일치), AAA(불일치), AAAB(불일치) 이다.

 

* : 0개나 하나이상의 문자가 있는 것을 의미한다.

예제 : A*B 패턴은 AB(일치), AAAAAAAAAB(일치), A123B(일치), AAAAAAAA(불일치) 이다.

 

+ : +앞에있는 문자가 한번이상 반복됨을 의미한다.

예제 : AB+ 패턴은 AB(일치), ABBBB(일치), ABC(불일치), A(불일치) 이다.

 

[] : [ ] 사이에 있는 형식이 일치하는것을 의미한다. 즉 [AB] 는 A, B만일치, [A-Z] 는 A부터 Z중 하나의 문자와 일치한다.

예제 : [A-C] 패턴은 A(일치), B(일치), AB(불일치), BC(불일치) 이다.

 

[^] : ^다음에 문자를 쓰면 해당 문자를 제외한다는 것을 의미한다.

예제 : [^A-C]D 패턴은 DD(일치), AD(불일치), DDD(불일치), D(불일치) 이다.

 

() : ( ) 사이에 문자가 하나의 묶음이된다. 즉 (ab)+ 는 abababab 와 일치한다.

예제 : (ab) 패턴은 ab(일치), ba(불일치) 이다.

 

{} : { } 사이에 숫자를 쓰면 그 숫자 만큼 패턴이 반복됨을 의미한다.

[A-C]{1,4}는 A,B,C 를 1개에서 4개 조합하면 된다. AAAA도 가능하고 A, BA, ABC, ACBA도 가능하다.

예제 : [A-C]{1,3} 패턴은 AA(일치), CBC(일치), ADA(불일치), ACCC(불일치)이다.

 

^ : 문자열의 시작을 의미한다.

 

@ : 문자열의 끝을 의미한다.

 

를 형식이다. 이것을알고 조건을 살펴 본다면 

(@"^(?=.*?[A-Z]) 는 대문자를 넣어야한다는 것이고,

(?=.*?[a-z])는 소문자를 넣어야 한다는 것이다.

(?=.*?[0-9]) 는 숫자를,

(?=.*?[#?!@$%^*-])는 특수문자를 넣어야한다는 의미이다. 

뒤의 .{8,}$는 글자수가 8자리 이상이어야한다는 조건이다. 

그 뒤

if (regex.IsMatch(password))
            {
                string query = Query.GetInstance().Update("CoffeeUser").Set("pw = '"+ password +"'").Where("id = '"+ userName+"'").ExeQuery();
                DBmanager.GetInstance().Update(query);
                MessageBox.Show("비밀번호 변경 완료");
            }

이런식으로 IsMatch를 사용하여 조건이 맞는지 확인하고 DB의 유저 정보를 바꾸어준다.

반응형