import Foundation enum PersonalInfoRedactor { static let emailPlaceholder = "Hidden" private static let emailRegex: NSRegularExpression? = { let pattern = #"[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}"# return try? NSRegularExpression(pattern: pattern, options: [.caseInsensitive]) }() static func redactEmail(_ email: String?, isEnabled: Bool) -> String { guard let email, !email.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty else { return "" } guard isEnabled else { return email } return Self.emailPlaceholder } static func redactEmails(in text: String?, isEnabled: Bool) -> String? { guard let text else { return nil } guard isEnabled else { return text } guard let regex = Self.emailRegex else { return text } let range = NSRange(text.startIndex..<text.endIndex, in: text) return regex.stringByReplacingMatches( in: text, options: [], range: range, withTemplate: Self.emailPlaceholder) }}
import Foundation
enum PersonalInfoRedactor {
static let emailPlaceholder = "Hidden"
private static let emailRegex: NSRegularExpression? = {
let pattern = #"[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}"#
return try? NSRegularExpression(pattern: pattern, options: [.caseInsensitive])
}()
static func redactEmail(_ email: String?, isEnabled: Bool) -> String {
guard let email, !email.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty else { return "" }
guard isEnabled else { return email }
return Self.emailPlaceholder
}
static func redactEmails(in text: String?, isEnabled: Bool) -> String? {
guard let text else { return nil }
guard isEnabled else { return text }
guard let regex = Self.emailRegex else { return text }
let range = NSRange(text.startIndex..<text.endIndex, in: text)
return regex.stringByReplacingMatches(
in: text,
options: [],
range: range,
withTemplate: Self.emailPlaceholder)
}
}