Ответ 1
NSMutableCharacterSet *_alnum = [NSMutableCharacterSet characterSetWithCharactersInString:@"_"];
[_alnum formUnionWithCharacterSet:[NSCharacterSet alphanumericCharacterSet]];
Создание набора NSCharacter для ограничения UITextField для ввода имен пользователей. Я хочу, чтобы пользователь мог также ввести символ подчеркивания (поэтому [A-Za-z0-9_]), но alphanumericCharacterSet не включает его. Есть ли способ указать такой диапазон в краткой форме? Я вижу + (id)characterSetWithRange:(NSRange)aRange
, но я не понимаю, как это будет работать.
У меня есть простой подкласс класса UITextField, которому я передаю набор символов. Ограничение работает отлично и не позволяет пользователю вводить что-либо, кроме буквенно-цифрового. Просто добавьте "_" к этим скидкам.
NSCharacterSet *characterSet = [NSCharacterSet alphanumericCharacterSet];
[textField setAllowed:characterSet];
[textField setFrame:frame];
NSMutableCharacterSet *_alnum = [NSMutableCharacterSet characterSetWithCharactersInString:@"_"];
[_alnum formUnionWithCharacterSet:[NSCharacterSet alphanumericCharacterSet]];
Другим способом было бы сделать его изменчивым и добавить его.
NSMutableCharacterSet *characterSet = [NSMutableCharacterSet alphanumericCharacterSet];
[characterSet addCharactersInString:@"_"];
- (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);
}