iphone objective-c nscharacterset

iphone - NSCharacterSet: ¿Cómo agrego "_" a la restricción de texto alfanumérico CharacterSet?



objective-c (3)

Crear un conjunto de caracteres NSC para restringir un UITextField para ingresar nombres de usuario. Quiero que el usuario también pueda ingresar un guión bajo (así [A-Za-z0-9_]) pero alfanuméricoCharacterSet no lo incluye. ¿Hay alguna forma de especificar un rango como ese en forma abreviada? Veo + (id)characterSetWithRange:(NSRange)aRange , pero realmente no entiendo cómo funcionaría.

Tengo una subclase UITextField simple a la que le paso el conjunto de caracteres. La restricción funciona bien y no permite al usuario ingresar nada excepto alfanumérico. Solo necesita agregar el "_" a esas concesiones.

NSCharacterSet *characterSet = [NSCharacterSet alphanumericCharacterSet]; [textField setAllowed:characterSet]; [textField setFrame:frame];


Otra forma habría sido hacerlo mutable y agregarlo.

NSMutableCharacterSet *characterSet = [NSMutableCharacterSet alphanumericCharacterSet]; [characterSet addCharactersInString:@"_"];


C objetivo

NSMutableCharacterSet *_alnum = [NSMutableCharacterSet characterSetWithCharactersInString:@"_"]; [_alnum formUnionWithCharacterSet:[NSCharacterSet alphanumericCharacterSet]];

Rápido

let _alnum = NSMutableCharacterSet(charactersIn: "_") _alnum.formUnion(with: .alphanumerics)


- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSCharacterSet *blockedCharacters = [[NSCharacterSet whitespaceCharacterSet] invertedSet]; NSCharacterSet *blockedCharacters2 = [[NSCharacterSet letterCharacterSet] invertedSet]; return ([string rangeOfCharacterFromSet:blockedCharacters].location == NSNotFound || [string rangeOfCharacterFromSet:blockedCharacters2].location); }