[SWIFT] 에러 핸들링 , 정규식포함

힐링힐링·2023년 10월 19일
0

SWIFT 문법

목록 보기
19/26

에러 핸들링

  • 에러타입 선언
    • enum 열거명:Error{}
  • 에러던지기
    • func 함수명()throws → 반환타입(생략가능){ guard 값 else{throw 던질에러}}
  • 스로잉 메서드와 함수 호출
    • do{ try 함수} catch 던진에러{return}

정규식사용 예시1

/*
에러 핸들링 예제 02
비밀번호 검증 함수
사용자가 입력한 비밀번호가 다음 조건을 만족하는지 검증하는 함수를 작성하세요.
최소 8자 이상
최소 하나의 대문자, 소문자, 숫자, 특수문자 포함
조건을 만족하지 않으면 PasswordError 에러를 발생시키세요.
*/

enum PasswordError: Error {
    case tooShort
    case missingUppercase
    case missingLowercase
    case missingNumber
    case missingSymbol
}

func validatePassword(_ expression:String) throws{
    let upperCase = ".*[A-Z]+.*" //대문자 포함
    let lowerCase = ".*[a-z]+.*" //소문자 포함
    let numberCase = ".*[0-9]+.*" //숫자 포함
    let symbolsCase = ".*[!@#$%^&*()_+-=[]{}|;:,./<>?]+.*" // 기호 포함

    guard expression.count > 8 else {
        throw PasswordError.tooShort
    }
    
    guard let _ = expression.range(of: upperCase, options: .regularExpression) else {
        throw PasswordError.missingUppercase
    }
    
    guard let _ = expression.range(of: lowerCase, options: .regularExpression) else {
        throw PasswordError.missingLowercase
    }
    
    guard let _ = expression.range(of: numberCase, options: .regularExpression) else {
        throw PasswordError.missingNumber
    }
    
    guard let _ = expression.range(of: symbolsCase, options: .regularExpression) else {
        throw PasswordError.missingSymbol
    }
}
//let symbols = "!@#$%^&*()_+-=[]{}|;:,./<>?"
// 예시:
do {
    try validatePassword("AAAAaaaAAA2")
} catch let error as PasswordError {
    switch error {
    case .tooShort:
        print("Password is too short")
    case .missingUppercase:
        print("Password is missing an uppercase letter")
    case .missingLowercase:
        print("Password is missing a lowercase letter")
    case .missingNumber:
        print("Password is missing a number")
    case .missingSymbol:
        print("Password is missing a symbol")
    }
}

Contains사용 예시2,

/*
에러 핸들링 예제 02
비밀번호 검증 함수
사용자가 입력한 비밀번호가 다음 조건을 만족하는지 검증하는 함수를 작성하세요.
최소 8자 이상
최소 하나의 대문자, 소문자, 숫자, 특수문자 포함
조건을 만족하지 않으면 PasswordError 에러를 발생시키세요.
*/

enum PasswordError: Error {
    case tooShort
    case missingUppercase
    case missingLowercase
    case missingNumber
    case missingSymbol
}

func validatePassword(_ expression:String) throws{
 
    let symbolsCase = ".*[!@#$%^&*()_+-=[]{}|;:,./<>?]+.*" // 기호 포함

    guard expression.count > 8 else {
        throw PasswordError.tooShort
    }

    guard let _ = expression.contains(where: { $0.isLowercase }) else {
        throw PasswordError.missingUppercase
    }
    
    guard let _ = expression.contains(where: { $0.isUppercase }) else {
        throw PasswordError.missingLowercase
    }
    
    guard let _ = expression.contains(where: { $0.isNumber }) else {
        throw PasswordError.missingNumber
    }
    
    guard let _ = expression.range(of: symbolsCase, options: .regularExpression) else {
        throw PasswordError.missingSymbol
    }
}
//let symbols = "!@#$%^&*()_+-=[]{}|;:,./<>?"
// 예시:
do {
    try validatePassword("AAAAaaaAAA2")
} catch let error as PasswordError {
    switch error {
    case .tooShort:
        print("Password is too short")
    case .missingUppercase:
        print("Password is missing an uppercase letter")
    case .missingLowercase:
        print("Password is missing a lowercase letter")
    case .missingNumber:
        print("Password is missing a number")
    case .missingSymbol:
        print("Password is missing a symbol")
    }
}
profile
블로그 이전합니다 https://james-kim-tech.tistory.com/

0개의 댓글