로그인하는 시스템을 만들때에 비밀번호를 입력한다. 이때 비밀번호 조건을 만들기위해서 if문을 이용하여 조건을 만들었었다. 하지만 정규화를 사용한다면 조건을 빠르고 쉽게 확인할 수 있다.
정규화를 사용하기 위해서는 먼저 using System.Text.RegularExpressions; 을 사용하여야 한다.
Regex regex = new Regex(@"^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^*-]).{8,}$");
이런식으로 Regex객체를 생성하면서 조건을 넣어주면 된다. 생성자 매개변수로 조건을 넣어주게 되는데 간단히 살펴보자면
예제 : 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의 유저 정보를 바꾸어준다.