Подтвердить что ты не робот

NSCharacterSet: как добавить "_" в буквенно-числовой текст?

Создание набора NSCharacter для ограничения UITextField для ввода имен пользователей. Я хочу, чтобы пользователь мог также ввести символ подчеркивания (поэтому [A-Za-z0-9_]), но alphanumericCharacterSet не включает его. Есть ли способ указать такой диапазон в краткой форме? Я вижу + (id)characterSetWithRange:(NSRange)aRange, но я не понимаю, как это будет работать.

У меня есть простой подкласс класса UITextField, которому я передаю набор символов. Ограничение работает отлично и не позволяет пользователю вводить что-либо, кроме буквенно-цифрового. Просто добавьте "_" к этим скидкам.

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

Ответ 1

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

Ответ 2

Другим способом было бы сделать его изменчивым и добавить его.

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

Ответ 3

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

}