String Extensions
String extensions for validation, truncation, slug generation, and case conversion.
extension String {
/// Check if string is valid email
var isValidEmail: Bool {
let regex = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/
return self.wholeMatch(of: regex) != nil
}
/// Truncate string with ellipsis
func truncated(to maxLength: Int, trailing: String = "...") -> String {
guard count > maxLength else { return self }
return String(prefix(maxLength - trailing.count)) + trailing
}
/// Convert to URL-friendly slug
var slugified: String {
lowercased()
.replacingOccurrences(of: " ", with: "-")
.replacingOccurrences(of: "[^a-z0-9-]", with: "", options: .regularExpression)
.replacingOccurrences(of: "-+", with: "-", options: .regularExpression)
.trimmingCharacters(in: CharacterSet(charactersIn: "-"))
}
/// Convert camelCase to snake_case
var snakeCased: String {
let pattern = "([a-z])([A-Z])"
return self.replacingOccurrences(
of: pattern,
with: "$1_$2",
options: .regularExpression
).lowercased()
}
}