55

ユーザー名を入力するためのUITextFieldを制限するNSCharacterセットを構築します。ユーザーがアンダースコアも入力できるようにしたいのですが([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: "_")

あなたはそれが(遊び場で)追加されたことを確認することができます:

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 に答える