34 lines
1.4 KiB
Swift
34 lines
1.4 KiB
Swift
import Foundation
|
|
|
|
enum PersonalInfoRedactor {
|
|
static let emailPlaceholder = ""
|
|
|
|
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)
|
|
guard regex.firstMatch(in: text, options: [], range: range) != nil else { return text }
|
|
let redacted = regex.stringByReplacingMatches(
|
|
in: text,
|
|
options: [],
|
|
range: range,
|
|
withTemplate: Self.emailPlaceholder)
|
|
return redacted
|
|
.replacingOccurrences(of: #"\s+([:.,;])"#, with: "$1", options: .regularExpression)
|
|
.replacingOccurrences(of: #"\s{2,}"#, with: " ", options: .regularExpression)
|
|
.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
}
|
|
}
|