^ | 시작 anchor |
---|---|
(?=.[A-Z].[A-Z]) | 2개의 대문자 반드시 포함 |
(?=.[!@#$&]) | 특수문자 반드시 포함 |
(?=.[a-z].[a-z].*[a-z]) | 3개의 소문자 반드시 포함 |
(?=.[0-9])(?=.[a-z]) | 숫자와 소문자 반드시 포함 |
[A-Za-z\d!%*?&] | (대문자 or 소문자)와 특수문자 반드시 포함 |
.{8, 16} | 길이는 88 ~ 16자리 |
$ | 끝 anchor |
로그인, 회원가입, 비밀번호 재설정 로직을 구현 중 이메일, 비밀번호에 관한 유효성 검사를 하는 부분이 있어서 정규표현식의 예시들을 찾아봐서 적용했다.
예시로만 봐도 어느정도 문법이 예측이가서 바로 적용시키긴 했지만, 향후 제대로 문법 공부를 하는 것도 좋을 것 같다.
AuthModel에 static method를 통해 유효성 검사
static public func emailValidCheck(email: String) -> Bool {
let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
return emailTest.evaluate(with: email)
}
static public func registerPasswordValidCheck(password: String) -> RegisterPasswordCheckType {
let lengthreg = ".{8,20}"
let lengthtesting = NSPredicate(format: "SELF MATCHES %@", lengthreg)
if lengthtesting.evaluate(with: password) == false {
return RegisterPasswordCheckType.length
}
let combinationreg = "^(?=.*[A-Za-z])(?=.*[0-9]).{8,20}"
let combinationtesting = NSPredicate(format: "SELF MATCHES %@", combinationreg)
if combinationtesting.evaluate(with: password) == false {
return RegisterPasswordCheckType.combination
}
let specialreg = "^(?=.*[!@#$%^&*()_+=-]).{8,20}"
let specialtesting = NSPredicate(format: "SELF MATCHES %@", specialreg)
if specialtesting.evaluate(with: password) == false {
return RegisterPasswordCheckType.special
}
return RegisterPasswordCheckType.right
}