49 lines
1.6 KiB
Swift
49 lines
1.6 KiB
Swift
//
|
|
// UserFieldFormatter.swift
|
|
// PrivadoVPN
|
|
//
|
|
// Created by Juraldinio on 7/1/21.
|
|
// Copyright © 2021 Privado LLC. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
final class UserFieldFormatter: Formatter {
|
|
|
|
private lazy var disallowedCharacters: CharacterSet = {
|
|
var allowed = CharacterSet()
|
|
allowed.formUnion(.decimalDigits)
|
|
allowed.insert(charactersIn: "@_-.")
|
|
allowed.insert(charactersIn: "QWERTYUIOPASDFGHJKLZXCVBNM")
|
|
allowed.insert(charactersIn: "qwertyuiopasdfghjklzxcvbnm")
|
|
return allowed.inverted
|
|
}()
|
|
|
|
private var current = ""
|
|
|
|
override func isPartialStringValid(_ partialString: String, newEditingString newString: AutoreleasingUnsafeMutablePointer<NSString?>?, errorDescription error: AutoreleasingUnsafeMutablePointer<NSString?>?) -> Bool {
|
|
|
|
let length = partialString.count
|
|
guard length > 0 else { return true }
|
|
|
|
let result = partialString.trimmingCharacters(in: self.disallowedCharacters)
|
|
if length == result.count { self.current = partialString }
|
|
|
|
return length == result.count
|
|
}
|
|
|
|
override func string(for obj: Any?) -> String? {
|
|
if obj.isExist
|
|
, let string = obj as? String {
|
|
return string
|
|
}
|
|
return self.current
|
|
}
|
|
|
|
override func getObjectValue(_ obj: AutoreleasingUnsafeMutablePointer<AnyObject?>?, for string: String, errorDescription error: AutoreleasingUnsafeMutablePointer<NSString?>?) -> Bool {
|
|
obj?.pointee = string as AnyObject
|
|
return true
|
|
}
|
|
|
|
}
|