반응형

String을 사용하다가 유효성을 검사해야 하는 경우가 있습니다.

// MARK: - 문자열 유효성 검사
extension String {
    /// 패턴이 유효한지 여부
    /// - Parameter pattern: 확인할 패턴
    /// - Returns: 패턴의 유효 여부
    private func isValid(pattern: String) -> Bool {
        range(of: pattern, options: .regularExpression) != nil
    }
    
    /// 최소한의 문자열 수를 가지고 있는지 여부
    /// - Parameter count: 최소 문자열 수
    /// - Returns: 최소 문자열 수 이상이면 true, 아니면 false
    func isValidCount(_ count: Int) -> Bool {
        isValid(pattern: "(?=.{\(count),})")
    }
    
    /// 최소 1개 이상의 대문자를 가지고 있는지 여부
    var isHasCapital: Bool {
        isValid(pattern: "(?=.*[A-Z])")
    }
    
    /// 최소 1개 이상의 숫자를 가지고 있는지 여부
    var isHasDigit: Bool {
        isValid(pattern: #"(?=.*\d)"#)
    }
    
    /// 모두 숫자로 되어 있는지 여부
    var isOnlyDigit: Bool {
        isValid(pattern: "^[0-9]*$")
    }
    
    /// 최소 1개 이상의 특수문자가지고 있는지 여부
    var isHasSpecial: Bool {
        isValid(pattern: "(?=.*[ !$%&?._-])")
    }
    
    /// 이메일 포멧 여부
    var isValidEmail: Bool {
        isValid(pattern: #"^\S+@\S+\.\S+$"#)
    }
    
    /// 백스페이스 키 여부
    var isBackspace: Bool {
        guard let char = cString(using: String.Encoding.utf8) else { return false }
        
        return strcmp(char, "\\b") == -92
    }
    
    /// 이미지 문자 포함 여부 
    var isHasEmoji: Bool {
        unicodeScalars.first { $0.properties.isEmojiPresentation } != nil
    }
}
반응형
Posted by 까칠코더
,