I have a set with the characters I allow in my string:
var characterSet:NSCharacterSet = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ")
I want to strip any other characters from a string so two unformatted data can be considered equal, like this:
"American Samoa".lowercaseString == "american_samoa1".lowercaseString
the lowercase version of these transformed strings would be "americansamoa"
Let's write a function for that (in swift 1.2).
func stripOutUnwantedCharactersFromText(text: String, set characterSet: Set<Character>) -> String {
return String(filter(text) { set.contains($0) })
}
You can call it like that:
let text = "American Samoa"
let chars = Set("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
let strippedText = stripOutUnwantedCharactersFromText(text, set: chars)
Pure swift. Yeah.
You were on the right track. But you can use the invertedSet on your NSCharSet. That means you allow every character you set in your NSCharSet, because it's easier to do that way. Otherwise you'd need to check every char you don't want to allow which are many more than set the allowed ones:
var charSet = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ").invertedSet
var unformatted = "american_samoa1"
var cleanedString = join("", unformatted.componentsSeparatedByCharactersInSet(charSet))
println(cleanedString) // "americansamoa"
As you see, I use the join method on the created array. I do that because you really want a string and otherwise you'd have a array of strings.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With