iosiphoneregexswiftnsregularexpression

Check if string contains special characters in Swift


I have to detect whether a string contains any special characters. How can I check it? Does Swift support regular expressions?

var characterSet:NSCharacterSet = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
if (searchTerm!.rangeOfCharacterFromSet(characterSet).location == NSNotFound){
    println("Could not handle special characters")
}

I tried the code above, but it matches only if I enter the first character as a special character.


Solution

  • 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")
    }