web-dev-qa-db-fra.com

NSCharacterSet: Comment ajouter "_" à la restriction de texte alphanumericCharacterSet?

Création d'un ensemble NSCharacter pour restreindre un UITextField pour la saisie de noms d'utilisateurs. Je veux que l'utilisateur puisse également entrer un trait de soulignement (donc [A-Za-z0-9_]) mais alphanumericCharacterSet ne l'inclut pas. Existe-t-il un moyen de spécifier une plage comme celle-ci sous forme abrégée? Je vois + (id)characterSetWithRange:(NSRange)aRange, mais je ne comprends pas vraiment comment cela fonctionnerait.

J'ai une simple sous-classe UITextField à laquelle je passe le jeu de caractères. La restriction fonctionne correctement et ne permet pas à l'utilisateur de saisir autre chose qu'un alphanumérique. Il suffit d'ajouter le "_" à ces allocations.

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

Objectif-C

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

rapide

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

Une autre façon aurait été de le rendre mutable et de l'ajouter.

Objectif-C

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

rapide

let characterSet = NSMutableCharacterSet.alphanumeric()
characterSet.addCharacters(in: "_")

Vous pouvez vérifier qu'il a été ajouté (dans une aire de jeux) avec:

characterSet.characterIsMember(UInt16(Character("^").unicodeScalars.first!.value)) // false
characterSet.characterIsMember(UInt16(Character("_").unicodeScalars.first!.value)) // true -- YAY!
characterSet.characterIsMember(UInt16(Character("`").unicodeScalars.first!.value)) // false
28
Russ Van Bert
- (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);  

}
0
AsbelK