func isPasswordCorrect(_ value:String) -> Bool { // code for check length, number exist, uppercase and lowercase chars }
func isEmailCorrect(_ value:String) -> Bool { // code for check length, number exist, uppercase and lowercase chars }
public protocol Criteriable { /// debug string for debug description of problem var debugErrorString : String {get} /// Check if value conform to criteria /// /// - Parameter value: value to be checked /// - Returns: return true if conform func isConform(to value:String) -> Bool }
public struct LowercaseLetterExistCriteria : Criteriable { public var debugErrorString: String = debugMessage(LowercaseLetterExistCriteria.self, message:"no lowercase char exists") public init(){} public func isonform(to value: String) -> Bool { for char in value.characters { if char.isLowercase() == true { return true } } return false } }
public struct NumberExistCriteria : Criteriable { public var debugErrorString: String = debugMessage(NumberExistCriteria.self, message:"no number char exist") public init(){} public func isonform(to value: String) -> Bool { let regExptest = NSPredicate(format: "SELF MATCHES %@", ".*[0-9]+.*") return regExptest.evaluate(with: value) } }
public struct UppercaseLetterExistCriteria : Criteriable { public var debugErrorString: String = debugMessage(UppercaseLetterExistCriteria.self, message:"no uppercase char exists") public init(){} public func isonform(to value: String) -> Bool { for char in value.characters { if char.isUppercase() == true { return true } } return false } }
/// Validator public struct StringValidator { /// predictions public var criterias: [Criteriable] ///init public init(_ criterias: [Criteriable]) { self.criterias = criterias } /// validate redictors to comform /// /// - Parameters: /// - value: string than must be validate /// - forceExit: if true -> stop process when first validation fail. else create array of fail criterias /// - result: result of validating public func isValide(_ value:String, forceExit:Bool, result:@escaping (ValidatorResult) -> ()) { // validating code } }
/// Validator result object /// /// - valid: everething if ok /// - notValid: find not valid criteria /// - notValide: not valid array of criterias public enum ValidatorResult { case valid case notValid(criteria:Criteriable) case notValides(criterias:[Criteriable]) }
struct MyCustomCriteria : Criteriable { var debugErrorString: String = debugMessage(MyCustomCriteria.self, message:"some debug message") func isConform(to value: String) -> Bool { /* some logic for check */ return false } }
Source: https://habr.com/ru/post/316016/
All Articles