상세 컨텐츠

본문 제목

[Review] 로그인/회원가입 유효성검사 라이브러리

iOS 캐기/Review 캐기

by Atlas 2023. 7. 4. 02:04

본문

728x90
반응형

시나리오 : 로그인, 회원가입 시사용하는 유효성검사를 조금 더 편하게 사용하기 위한 라이브러리를 리뷰

 

 

한 줄 요약:

로그인 / 회원가입 등에서 입력받은 값의 유효성검사를 간편하게 할 수 있다. 

(빌더패턴으로 필요한 정규식을 간단하게 만들 수 있어요! )

 

설치방법

SPM을 지원하고 있다. 

엑스코드를 실행하고 상단에서 

파일 > Swift Packages > Add Package Dependency에서 아래의 링크를 검색하고 추가해 주면 된다. 

 

https://github.com/PotatoArtie/ValidationKit.git

1.Next Major with 1.0.0

2.brach로 선택하면 main 

3.exact version == 1.0.0

 

사용법 

1. 이메일 유효성 검사

먼저 간단한 이메일형식의 유효성검증 방법은 아주 간단하게 사용할 수 있다.

이메일 유효성 검사를 위한 정규식의 경우 String을 Extension 해서 구현해 두었기 때문이다. 

extension String {
    
    /// 문자열이 이메일 형식이 맞는지 확인합니다.
    /// - Returns: 매칭여부가 리턴됩니다.
    public func isValidEmail() -> Bool {
        let regEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{1,30}"
      
        let matchResult = NSPredicate(format:"SELF MATCHES %@", regEx)
        return matchResult.evaluate(with: self)
    }
}

 

문자열에서 간편하게 사용이 가능하다.

 

2. 커스텀 정규식을 생성하여 유효성 검사하기 

이번 라이브러리의 핵심기능이라고 할 수 있겠다. 빌더패턴으로 구성해서 필요한 조건들을 입맛에 맞게끔 설정하여 사용하면 된다. 

 

예시 조건을 들어보자.

1. 필수로 포함되어야 하는 조건은 영어, 숫자, 특수문자
2. 입력받을 문자열의 길이의 최소길이는 8, 최대길이는 20으로 설정
3. 커스텀으로 특수문자 지정
4. 포함되어야 하는 조건은 영어와 숫자
5. 로그도 보고 싶다!

 

백문이 불여일견!  우선 코드부터 보자 

예시조건에 있는 사항들을 아래의 코드처럼 추가할 수 있다.

    // 빌더패턴으로 필요한 설정을 추가해주세요.
    let builder = RegExBuilder()
                    .required([.english,.number,.specialSymbols]) // 필수로 포함되어야하는 설정
                    .setLength(min: 8, max: 20) // 최소 최대 글자
                    .setSpecialCharacter(#"!@#$%^&"#) // 특수문자 설정 
                    .setRegex([.english,.number]) // 포함되어야하는 설정
                    .setLogOption(.verbose) // 로그레벨

 

빌더를 주입하여 유효성검사를 진행해 줄 validator를 생성하고 isValid() 메서드를 사용하면 된다.

    //ValidationDirector를 통해 validator 인스턴스를 생성해주세요.
    let validator = ValidationDirector.createValidator(builder: builder)


    let YOURTEXT = "123456789"
    // validator 인스턴스의 isValid(String)을 통해서 유효성 검사를 진행하시면 됩니다.
    validator.isValid(YOURTEXT) { response in
        switch response {
        case .success(let success):
            print(success)
        case .failure(let failure):
            print(failure.desc)
        }
    }

 

 

전체코드

    // 빌더패턴으로 필요한 설정을 추가해주세요.
    let builder = RegExBuilder()
                    .required([.english,.number,.specialSymbols]) // 필수로 포함되어야하는 설정
                    .setLength(min: 8, max: 20) // 최소 최대 글자
                    .setSpecialCharacter(#"!@#$%^&"#) // 특수문자 설정 
                    // #""# 포맷으로 커스텀 특수문자열을 넘겨줘야한다.
                    .setRegex([.english,.number]) // 포함되어야하는 설정
                    .setLogOption(.verbose) // 로그레벨

    //ValidationDirector를 통해 validator 인스턴스를 생성해주세요.
    let validator = ValidationDirector.createValidator(builder: builder)


    let YOURTEXT = "123456789"
    // validator 인스턴스의 isValid(String)을 통해서 유효성 검사를 진행하시면 됩니다.
    validator.isValid(YOURTEXT) { response in
        switch response {
        case .success(let success):
            print(success)
        case .failure(let failure):
            print(failure.desc)
        }
    }
    
    예상 결과 : 영어가 포함되어 있지 않습니다

 

Quick Help를 지원하고 있어서 XCode에서 직접 적용하면서 쉽게 확인할 수 있다.

 

 

한 땀 한 땀 노력해서 커버리지 100% 👍👍👍

(제가 놓친 테스트케이스가 있다면 언제든 PR를 통해서 알려주세요~ 컨트리뷰터 ㄱㄱ )

 

지식의 저주에 빠지지 않도록 최선을 다했기에 많은 분들에게 도움이 되면 좋겠다 👍

 

 

마무리 

- 오픈소스 만들기 2탄 프로젝트로 자주 사용하는 기능들을 위주로 시작하는 중인데 1탄에 이어서 재밌어서 시간 가는 줄 몰랐다.

(1탄은 숫자에서 한글금액 표기변환하는 것을 라이브러리화 해보았다.)

2023.05.01 - [iOS 캐기/Review 캐기] - [Review] 숫자에서 한글금액 표기 변환 라이브러리

 

- 누구나 각자 간단하게 구현할 수 있는 기능이지만 Tuist 등을 사용하기 전에 1. 모듈화를 직접 경험해 보는 것 , 오픈소스화를 하면서 사용자(해당 문서를 읽는 개발자)에 대한 배려를 위해 2. 가독성 좋게 문서화하는 것 이 모든 것들이 개발자에게 모두 좋은 경험이고 꼭 해봐야 하는 경험이라고 생각한다.

 

지속적인 성장을 추구하는 개발자라면 꼭 해보길 추천드립니다. 시간이 너~무 잘 가요 😎

도움이 되셨다면 깃헙에서 스타하나 꾸-욱 눌러주세요 :)

오픈소스 개발을 진행하는데 많은 도움이 됩니다. 미리 감사의 말씀드립니다❤️

 

***코드리뷰 및 PR을 통해서 버그 및 개선사항이 있다면 언제든 환영입니다. ***

 

[Korea iOS Open Source] KIOS 오거나이저 모집하고 있습니다. 

오픈소스 개발 및 분석 및 리뷰의 관심이 있으시다면 언제든 지원 부탁드립니다.

 

 

https://github.com/PotatoArtie/ValidationKit.git

 

GitHub - PotatoArtie/ValidationKit

Contribute to PotatoArtie/ValidationKit development by creating an account on GitHub.

github.com

 

https://github.com/PotatoArtie/KoreanCurrencyKit

 

GitHub - PotatoArtie/KoreanCurrencyKit

Contribute to PotatoArtie/KoreanCurrencyKit development by creating an account on GitHub.

github.com

 

반응형

관련글 더보기

댓글 영역