regular online matches first expressions example creator ios iphone regex swift nsregularexpression

ios - online - Compruebe si la cadena contiene caracteres especiales en Swift



swift 4 regular expression example (6)

Tengo que detectar si una cadena contiene caracteres especiales. ¿Cómo puedo comprobarlo? ¿Swift soporta expresiones regulares?

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

Probé el código anterior, pero coincide solo si ingreso el primer carácter como un carácter especial.


Dependiendo de la definición de caracteres especiales, puedes usar esto:

let chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ0123456789" chars.canBeConvertedToEncoding(NSASCIIStringEncoding)


Esta respuesta puede ayudar a las personas que están usando 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 }

Tomada referencia de la respuesta de @Martin R.


La inversión de tu conjunto de caracteres funcionará, porque en tu conjunto de caracteres tienes todos los caracteres válidos:

var characterSet:NSCharacterSet = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ0123456789") if (searchTerm!.rangeOfCharacterFromSet(characterSet.invertedSet).location == NSNotFound){ println("No special characters") }

Espero que esto ayude.. :)


La respuesta de @Martin R es genial, solo quería actualizarla (la segunda parte) a la versión Swift 2.1

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

¡Usé el try! Como podemos estar seguros de que crea una expresión regular, no se basa en ningún tipo dinámico de datos


Validación de la contraseña Con lo siguiente: - (Contraseña de al menos ocho caracteres, un carácter especial, una mayúscula, una letra minúscula y un dígito)

var isValidateSecialPassword : Bool { if(self.count>=8 && self.count<=20){ }else{ return false } let nonUpperCase = CharacterSet(charactersIn: "ABCDEFGHIJKLMNOPQRSTUVWXYZ").inverted let letters = self.components(separatedBy: nonUpperCase) let strUpper: String = letters.joined() let smallLetterRegEx = ".*[a-z]+.*" let samlltest = NSPredicate(format:"SELF MATCHES %@", smallLetterRegEx) let smallresult = samlltest.evaluate(with: self) let numberRegEx = ".*[0-9]+.*" let numbertest = NSPredicate(format:"SELF MATCHES %@", numberRegEx) let numberresult = numbertest.evaluate(with: self) let regex = try! NSRegularExpression(pattern: ".*[^A-Za-z0-9].*", options: NSRegularExpression.Options()) var isSpecial :Bool = false if regex.firstMatch(in: self, options: NSRegularExpression.MatchingOptions(), range:NSMakeRange(0, self.count)) != nil { print("could not handle special characters") isSpecial = true }else{ isSpecial = false } return (strUpper.count >= 1) && smallresult && numberresult && isSpecial }


Verifique su código si no hay ningún carácter en la cadena del conjunto dado. Lo que quieres es verificar si algún personaje no está en el conjunto dado:

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

También puedes lograr esto usando expresiones regulares:

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

El patrón [^A-Za-z0-9] coincide con un carácter que no pertenece a los rangos AZ, az o 0-9.

Actualización para Swift 2:

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

Actualización para Swift 3:

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