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