Ich bin nicht sicher, dass die beiden vorherigen Antworten die Anforderungen abdecken, also ist dies eine Antwort, die einer strengeren Interpretation der Anforderungen entspricht.
die Anforderungen aus den Kommentaren im Code des ursprünglichen Beitrags Taking:
//The string only contains alpha or numerical characters.
//But now I want to check that both character sets are present?
Dies bedeutet, dass eine Zeichenfolge, die den Test bestehen nur aus Zahlen und Buchstaben und mindestens einer von jeweils bestehen muss.
NSString
's rangeOfCharacterFromSet:
findet ein Zeichen in einer Zeichenfolge, wenn es zu einer bestimmten Gruppe gehört, so dass wir diese verwenden können.
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
}
Wie in der Dokumentation detailliert beschrieben, gibt die rangeOfCharacterFromSet:
eine NSRange von {NSNotFound, 0}, falls kein Zeichen aus dem Satz in der Kette zu finden ist. Dies ähnelt anderen Methoden zum Suchen nach Zeichenfolgen oder Zeichen in einer Zeichenfolge in Cocoa.
Ich weiß, dass es Häresie ist, dies zu sagen, aber die einfachste, verständlichste und effizienteste Art, dies zu tun, ist fast sicher, die Zeichenfolge durchzulaufen, jedes Zeichen mit 'characterAtIndex' zu extrahieren und an den entsprechenden Grenzen zu testen . Mit den anderen solltest du einige verdammt gute Kommentare haben, wenn du den Code in 6 Monaten verstehen willst. –