regular expresion espacio blanco alfanumerico ios uitextfield uitextfielddelegate

ios - expresion - Permitir solo caracteres alfanuméricos para un UITextField



expresion regular alfanumerico javascript (7)

Así es como lo hago:

// Define some constants: #define ALPHA @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" #define NUMERIC @"1234567890" #define ALPHA_NUMERIC ALPHA NUMERIC // Make sure you are the text fields ''delegate'', then this will get called before text gets changed. - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { // This will be the character set of characters I do not want in my text field. Then if the replacement string contains any of the characters, return NO so that the text does not change. NSCharacterSet *unacceptedInput = nil; // I have 4 types of textFields in my view, each one needs to deny a specific set of characters: if (textField == emailField) { // Validating an email address doesnt work 100% yet, but I am working on it.... The rest work great! if ([[textField.text componentsSeparatedByString:@"@"] count] > 1) { unacceptedInput = [[NSCharacterSet characterSetWithCharactersInString:[ALPHA_NUMERIC stringByAppendingString:@".-"]] invertedSet]; } else { unacceptedInput = [[NSCharacterSet characterSetWithCharactersInString:[ALPHA_NUMERIC stringByAppendingString:@".!#$%&''*+-/=?^_`{|}~@"]] invertedSet]; } } else if (textField == phoneField) { unacceptedInput = [[NSCharacterSet characterSetWithCharactersInString:NUMERIC] invertedSet]; } else if (textField == fNameField || textField == lNameField) { unacceptedInput = [[NSCharacterSet characterSetWithCharactersInString:ALPHA] invertedSet]; } else { unacceptedInput = [[NSCharacterSet illegalCharacterSet] invertedSet]; } // If there are any characters that I do not want in the text field, return NO. return ([[string componentsSeparatedByCharactersInSet:unacceptedInput] count] <= 1); }

Echa un vistazo a la referencia UITextFieldDelegate también.

¿Cómo haría para permitir ingresar solo caracteres alfanuméricos en un UITextField iOS?


Encontré una respuesta simple y funcional y quiero compartir:

conecte su UITextField para el evento EditingChanged a la siguiente IBAction

-(IBAction) editingChanged:(UITextField*)sender { if (sender == yourTextField) { // allow only alphanumeric chars NSString* newStr = [sender.text stringByTrimmingCharactersInSet:[[NSCharacterSet alphanumericCharacterSet] invertedSet]]; if ([newStr length] < [sender.text length]) { sender.text = newStr; } } }


La manera RegEx en Swift:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { if string.isEmpty { return true } let alphaNumericRegEx = "[a-zA-Z0-9]" let predicate = NSPredicate(format:"SELF MATCHES %@", alphaNumericRegEx) return predicate.evaluate(with: string) }


Para Swift: conecte su UITextField para el evento EditingChanged a la siguiente IBAction:

@IBAction func ActionChangeTextPassport(sender:UITextField){ if sender == txtPassportNum{ let newStr = sender.text?.stringByTrimmingCharactersInSet(NSCharacterSet.alphanumericCharacterSet().invertedSet) if newStr?.characters.count < sender.text?.characters.count{ sender.text = newStr } } }


Tendrá que usar los métodos de textField delegate y los métodos textFieldDidBeginEditing , shouldChangeCharactersInRange y textFieldDidEndEditing para verificar los caracteres.

Por favor, consulte este enlace para la documentación.


Utilice el método -textField:shouldChangeCharactersInRange:replacementString: con un NSCharacterSet que contiene la inversa de los caracteres que desea permitir. Por ejemplo:

// in -init, -initWithNibName:bundle:, or similar NSCharacterSet *blockedCharacters = [[[NSCharacterSet alphanumericCharacterSet] invertedSet] retain]; - (BOOL)textField:(UITextField *)field shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)characters { return ([characters rangeOfCharacterFromSet:blockedCharacters].location == NSNotFound); } // in -dealloc [blockedCharacters release];

Tenga en cuenta que deberá declarar que su clase implementa el protocolo (es decir, @interface MyClass : SomeSuperclass <UITextFieldDelegate> ) y establecer el delegate del campo de texto en la instancia de su clase.


Versión Swift 3

Enfoque de respuesta actualmente aceptado:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { // Get invalid characters let invalidChars = NSCharacterSet.alphanumerics.inverted // Attempt to find the range of invalid characters in the input string. This returns an optional. let range = string.rangeOfCharacter(from: invalidChars) if range != nil { // We have found an invalid character, don''t allow the change return false } else { // No invalid character, allow the change return true } }

Otro enfoque igualmente funcional:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { // Get invalid characters let invalidChars = NSCharacterSet.alphanumerics.inverted // Make new string with invalid characters trimmed let newString = string.trimmingCharacters(in: invalidChars) if newString.characters.count < string.characters.count { // If there are less characters than we started with after trimming // this means there was an invalid character in the input. // Don''t let the change go through return false } else { // Otherwise let the change go through return true } }