如何检测NSString是否包含特定的字符?

我有一个NSString对象,例如: – ($ 45,0000)

现在我想find这个string是否包含()或不

我怎样才能做到这一点?

你试图find它是否至less包含一个() ? 你可以使用-rangeOfCharacterFromSet: ::

 NSCharacterSet *cset = [NSCharacterSet characterSetWithCharactersInString:@"()"]; NSRange range = [mystr rangeOfCharacterFromSet:cset]; if (range.location == NSNotFound) { // no ( or ) in the string } else { // ( or ) are present } 

如果给定的string包含给定的字符,下面的方法将返回Yes

 -(BOOL)doesString:(NSString *)string containCharacter:(char)character { if ([string rangeOfString:[NSString stringWithFormat:@"%c",character]].location != NSNotFound) { return YES; } return NO; } 

你可以使用它如下:

  NSString *s = @"abcdefg"; if ([self doesString:s containCharacter:'a']) NSLog(@"'a' found"); else NSLog(@"No 'a' found"); if ([self doesString:s containCharacter:'h']) NSLog(@"'h' found"); else NSLog(@"No 'h' found"); 

输出:

2013-01-11 11:15:03.830 CharFinder [17539:c07]find了'a'

2013-01-11 11:15:03.831 CharFinder [17539:c07]找不到'h'

 - (bool) contains: (NSString*) substring { NSRange range = [self rangeOfString:substring]; return range.location != NSNotFound; } 

我得到了一个广泛的答案,你在我的代码中使用的问题。 此代码包括以下规则:1.没有特殊字符2.至less有一个大写和一个小英文字母3.至less有一个数字

  BOOL lowerCaseLetter,upperCaseLetter,digit,specialCharacter; int asciiValue; if([txtPassword.text length] >= 5) { for (int i = 0; i < [txtPassword.text length]; i++) { unichar c = [txtPassword.text characterAtIndex:i]; if(!lowerCaseLetter) { lowerCaseLetter = [[NSCharacterSet lowercaseLetterCharacterSet] characterIsMember:c]; } if(!upperCaseLetter) { upperCaseLetter = [[NSCharacterSet uppercaseLetterCharacterSet] characterIsMember:c]; } if(!digit) { digit = [[NSCharacterSet decimalDigitCharacterSet] characterIsMember:c]; } asciiValue = [txtPassword.text characterAtIndex:i]; NSLog(@"ascii value---%d",asciiValue); if((asciiValue >=33&&asciiValue < 47)||(asciiValue>=58 && asciiValue<=64)||(asciiValue>=91 && asciiValue<=96)||(asciiValue>=91 && asciiValue<=96)) { specialCharacter=1; } else { specialCharacter=0; } } if(specialCharacter==0 && digit && lowerCaseLetter && upperCaseLetter) { //do what u want NSLog(@"Valid Password %d",specialCharacter); } else { NSLog(@"Invalid Password %d",specialCharacter); UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Please Ensure that you have at least one lower case letter, one upper case letter, one digit and No Any special character" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; } 

为什么总是用NSCharactorSet? 这是简单而强大的解决scheme

 NSString *textStr = @"This is String Containing / Character"; if ([textStr containsString:@"/"]) { NSLog(@"Found!!"); } else { NSLog(@"Not Found!!"); 

您可以使用

 NSString rangeOfString: (NSString *) string 

见这里: https : //developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html%23//apple_ref/occ/instm/NSString/rangeOfString :

如果NSRange返回属性“位置”等于NSNotFound,那么该string不包含传递的string(或字符)。