NSCharacterSet:如何将“_”添加到字母数字字符集文本限制?

构build一个NSCharacter集以限制用于input用户名的UITextField。 我希望用户也可以input下划线(如[A-Za-z0-9_]),但字母数字字符集不包括它。 有没有一种方法来指定一个范围这样简短的forms? 我看到+ (id)characterSetWithRange:(NSRange)aRange ,但我不是真的了解如何工作。

我有一个简单的UITextField子类,我将字符集传递给。 限制工作正常,不允许用户input任何东西,但字母数字。 只需要添加“_”这些津贴。

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