Skip to content

Instantly share code, notes, and snippets.

@robertmryan
Created June 4, 2024 14:38
Show Gist options
  • Save robertmryan/08601b62afa76f0e5efa7fb9e0d452c0 to your computer and use it in GitHub Desktop.
Save robertmryan/08601b62afa76f0e5efa7fb9e0d452c0 to your computer and use it in GitHub Desktop.
let emailRegex = /((?:[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*"))@((?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]))/
let redactText = "…"
let maxUserNameLength = 24
func redactEmail(for line: String) -> String {
line.replacing(emailRegex) { match in
let (_, name, domain) = match.output
// If the username is too long, it might be a false positive for an email.
return name.count > maxUserNameLength ? "\(name)@\(domain)" : redactText
}
}
let candidate = "Claude’s email is [email protected], and his phone number is 555-1212."
print(redactEmail(for: candidate))
@robertmryan
Copy link
Author

The output:

Claude’s email is …, and his phone number was 555-1212.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment