NSStringが特定の文字だけで構成されているか判定したいことがある。文字種だけの問題で正規表現を使う程ではない、という時は、NSCharacterSetの包含関係の判定を使うと簡単にチェックできる。パスワードのValidationとか、UITextFieldに数字のみを受け付ける場合のちょっとしたチェックなどに便利。
例1: NSStringが数字のみで構成されているかチェック
NSCharacterSet *stringCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"]; NSCharacterSet *digitCharacterSet = [NSCharacterSet decimalDigitCharacterSet]; if ([digitCharacterSet isSupersetOfSet:stringCharacterSet]) { NSLog(@"数字のみ"); } else { NSLog(@"数字以外の文字が存在"); }
例2: 空白以外のASCIIコードで構成されているかチェック
NSCharacterSet *stringCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@"123abc~!"]; NSCharacterSet *asciiWithoutSpaceCharacterSet = [NSCharacterSet characterSetWithRange:NSMakeRange(0x21, 0x5e)]; if ([asciiWithoutSpaceCharacterSet isSupersetOfSet:stringCharacterSet]) { NSLog(@"英数字のみ(空白はなし)"); } else { NSLog(@"英数字以外の文字がある(空白の可能性もある)"); }
これだと全角も通るよ