Probar la cadena de text UITextField para que solo contenga caracteres alfanuméricos

Estoy intentando completar la validation de formulario en Swift y no puedo encontrar una forma de probar solo caracteres alfanuméricos en un UITextField.text.

He encontrado NSCharacterSet para ayudar a probar si se ha ingresado al less 1 letra (hasta ahora):

@IBOutlet weak var username: UITextField! let letters = NSCharacterSet.letterCharacterSet() //Check username contains a letter if (username.text!.rangeOfCharacterFromSet(letters) == nil) { getAlert("Error", message: "Username must contain at least 1 letter") } 

Ahora solo necesito una forma de validar que solo se ingresen numbers, letras (tal vez incluso guiones bajos y guiones). Hay muchas cosas para Obj-C, pero necesito una solución de SWIFT, por favor.

Gracias de antemano.

Verifique si la inversión de su set aceptado está presente:

 if username.text!.rangeOfCharacterFromSet(letters.invertedSet) != nil { print("invalid") } 

letters probablemente deban ser alphanumericCharacterSet() si es que desea include numbers también).

Si desea aceptar caracteres de subrayado o más caracteres, probablemente tendrá que crear un set de caracteres por su count. Pero la lógica de inversión seguirá siendo la misma.

Aunque es tarde para responder, pero esta respuesta podría ser útil para alguien.

Esto es simple y funcionó como un encanto para mí.

Swift 3:

 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { /// 1. replacementString is NOT empty means we are entering text or pasting text: perform the logic /// 2. replacementString is empty means we are deleting text: return true if string.characters.count > 0 { var allowedCharacters = CharacterSet.alphanumerics /// add characters which we need to be allowed allowedCharacters.insert(charactersIn: " -") // "white space & hyphen" let unwantedStr = string.trimmingCharacters(in: allowedCharacters) return unwantedStr.characters.count == 0 } return true } 

Nota: Esto también funcionará para pegar cadenas en el campo de text. La cadena pegada no se mostrará en el campo de text si contiene caracteres no deseados.