2010-08-21 21 views
7

Ich bin auf der Suche nach dem besten Weg, um zu überprüfen, ob ein NSString numerische und alphabetische Zeichen enthält. Was ich bisher herausgefunden habe, ist der Code unten, aber das sagt mir nur, dass keine Zeichen eingegeben wurden, die keine Zahlen oder Buchstaben sind.Überprüfen NSString enthält beide Buchstaben und Zahlen

if([[myNSString stringByTrimmingCharactersInSet: 
      [NSCharacterSet alphanumericCharacterSet]] isEqualToString:@""]){  
    //The string only contains alpha or numerical characters. 
    //But now I want to check that both character sets are present ?  
} 
+0

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. –

Antwort

14

Gerade trimmen letterCharacterSet und decimalDigitCharacterSet und prüfen, ob erzeugte Zeichenfolge nicht gleich der ursprünglichen Zeichenfolge ist:

if (![[myOriginalString stringByTrimmingCharactersInSet:[NSCharacterSet decimalDigitCharacterSet]] isEqualToString:myOriginalString] 
    && ![[myOriginalString stringByTrimmingCharactersInSet:[NSCharacterSet letterCharacterSet]] isEqualToString:myOriginalString]) { 
... 
} 
+0

Danke dir. Ja, das ist es, was ich am Ende getan habe. – ADude

+0

was für ein cooles Zeug! – jianpx

+0

erkennen einen Fehler: Wenn die Zeichenfolge Steuerzeichen enthält, gibt es YES zurück, das ist falsch. – jianpx

5

kovpas' Antwort funktioniert gut, wenn Sie Buchstaben am Anfang oder Ende und Ziffern auf die haben gegenüberliegendes Ende. Ein Problem tritt auf, wenn Ziffern zwischen Buchstaben eingebettet sind und umgekehrt, z. B. "abc123abc". Hier ist eine Lösung:

+0

diese Antwort funktioniert viel besser! Ich bin mir nicht sicher, warum Sie "invertedSet" verwenden. Danke – Ezeki

+0

Der Trick zu diesem Problem ist, dass es komplizierter ist, nach einer Bestätigung zu suchen. Die erste Überprüfung erstellt eine Zeichenfolge ohne Ziffern; Wenn die Zeichenfolge identisch mit der ursprünglichen Zeichenfolge ist, enthält die Zeichenfolge keine Ziffern. Eine ähnliche Überprüfung wird mit der zweiten Überprüfung auf Buchstaben durchgeführt. Aus diesem Grund gibt es für die 2 Bedingungen keine NOT. – Amory

+0

ja, aber Sie müssen nicht verwenden, invertedSet', es funktioniert perfekt auch ohne es – Ezeki

4

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.

+0

einfach zu verstehen – jianpx

Verwandte Themen