Check if string contains special characters in Swift Check if string contains special characters in Swift ios ios

Check if string contains special characters in Swift


Your code check if no character in the string is from the given set.What you want is to check if any character is not in the given set:

if (searchTerm!.rangeOfCharacterFromSet(characterSet.invertedSet).location != NSNotFound){    println("Could not handle special characters")}

You can also achieve this using regular expressions:

let regex = NSRegularExpression(pattern: ".*[^A-Za-z0-9].*", options: nil, error: nil)!if regex.firstMatchInString(searchTerm!, options: nil, range: NSMakeRange(0, searchTerm!.length)) != nil {    println("could not handle special characters")}

The pattern [^A-Za-z0-9] matches a character which is not from the ranges A-Z,a-z, or 0-9.

Update for Swift 2:

let searchTerm = "a+b"let characterset = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")if searchTerm.rangeOfCharacterFromSet(characterset.invertedSet) != nil {    print("string contains special characters")}

Update for Swift 3:

let characterset = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")if searchTerm.rangeOfCharacter(from: characterset.inverted) != nil {    print("string contains special characters")}


This answer may help the people who are using Swift 4.1

func hasSpecialCharacters() -> Bool {    do {        let regex = try NSRegularExpression(pattern: ".*[^A-Za-z0-9].*", options: .caseInsensitive)        if let _ = regex.firstMatch(in: self, options: NSRegularExpression.MatchingOptions.reportCompletion, range: NSMakeRange(0, self.count)) {            return true        }    } catch {        debugPrint(error.localizedDescription)        return false    }    return false}

Taken reference from @Martin R's answer.


With Swift 5 you can just do

if let hasSpecialCharacters =  "your string".range(of: ".*[^A-Za-z0-9].*", options: .regularExpression) != nil {}