55

构建一个 NSCharacter 集以限制 UITextField 输入用户名。我希望用户也能够输入下划线(因此 [A-Za-z0-9_]),但 alphanumericCharacterSet 不包括它。有没有办法以简短的形式指定这样的范围?我明白+ (id)characterSetWithRange:(NSRange)aRange了,但我并不真正理解它是如何工作的。

我有一个简单的 UITextField 子类,我将字符集传递给它。该限制工作正常,并且不允许用户输入除字母数字之外的任何内容。只需将“_”添加到这些津贴中。

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

3 回答 3

122

Objective-C

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

迅速

let _alnum = NSMutableCharacterSet(charactersIn: "_")
_alnum.formUnion(with: .alphanumerics)
于 2010-05-04T17:59:17.853 回答
28

另一种方法是使其可变并添加它。

Objective-C

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

迅速

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

您可以通过以下方式验证它是否已添加(在 Playground 中):

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
于 2012-03-15T05:05:45.920 回答
0
- (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);  

}
于 2015-01-13T21:37:36.467 回答