Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to strip special characters out of string?

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"

like image 851
Roberto Avatar asked Dec 17 '25 17:12

Roberto


2 Answers

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.

like image 156
mustafa Avatar answered Dec 20 '25 07:12

mustafa


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.

like image 24
Christian Avatar answered Dec 20 '25 08:12

Christian



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!