Files
2026-07-13 12:22:33 +08:00

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)
}
}