Я не уверен, что два предыдущих ответа охватывают требования, поэтому это ответ, соответствующий более строгой интерпретации требований.
Принимая требования из комментариев в коде исходного поста:
//The string only contains alpha or numerical characters.
//But now I want to check that both character sets are present?
Это означает, что строка для прохождения теста должна состоять только из цифр и букв и, по крайней мере, одной из них.
NSString
'rangeOfCharacterFromSet:
находит символ в строке, если он принадлежит определенному набору, поэтому мы можем использовать его.
NSString *string = // ... string to test;
NSCharacterSet *illegalChars = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
// Test if there is an illegal character in the string
BOOL hasIllegalCharacter = [string rangeOfCharacterFromSet: illegalCharacterSet].location != NSNotFound;
BOOL hasLetter = [string rangeOfCharacterFromSet: [NSCharacterSet letterCharacterSet]].location != NSNotFound;
BOOL hasDigit = [string rangeOfCharacterFromSet: [NSCharacterSet decimalDigitCharacterSet]].location != NSNotFound;
if (hasDigit && hasLetter && !hasIllegalCharacter ) {
// String OK
}
Как подробно описано в документах, rangeOfCharacterFromSet:
возвращает NSRange {NSNotFound, 0}, если в строке не найдено символов из набора. Это похоже на другие методы поиска строк или символов в строке в Какао.