2010-04-06 8 views
1

Je valide un NSString pour m'assurer que la chaîne ne contient pas d'apostrophes.Valider NSString

Le code que je utilise pour ce faire est

NSCharacterSet * invalidNumberSet = [NSCharacterSet characterSetWithCharactersInString:@"'"]; 
NSScanner * scanner = [NSScanner scannerWithString:string]; 
NSString * scannerResult; 
[scanner setCharactersToBeSkipped:nil]; 
[scanner scanUpToCharactersFromSet:invalidNumberSet intoString:&scannerResult]; 
if(![string isEqualToString:scannerResult]) 
{ 
    return 2; 
} 

retour 2 représente une erreur. Ce code fonctionne, sauf dans le cas où la chaîne est une apostrophe.

Pour contourner ce problème, j'ai ajouté le code suivant au-dessus du bloc précédent.

if([string isEqualToString:@"'"]); 
{ 
    return 2; 
} 

Ce code est évalué à true, quelle que soit l'entrée. J'ai besoin soit d'empêcher le premier bloc de se bloquer avec l'entrée de ', soit de faire fonctionner le second bloc.

Qu'est-ce qui me manque?

+0

@Chris: Vous pouvez vous appuyer sur la réponse de Chuck si vous avez déjà un ensemble de caractères à vérifier. Donc, si vous construisez un NSCharacterSet avec tous les caractères illégaux, vous pouvez faire quelque chose comme si (([string rangeOfCharacterFromSet: invalidSet]). Location! = NSNotFound) // faire quelque chose –

Répondre

3

Il n'y a aucune raison logique pour que le test isEqualToString: réussisse toujours. Si c'est votre code actuel, copié-collé, vous devez avoir une erreur ailleurs dans la fonction. En tout cas, il serait beaucoup plus simple de tester si l'emplacement de [string rangeOfString:@"'"] est NSNotFound

+0

Je savais qu'il me manquait quelque chose de simple! J'ai utilisé if ([chaîne rangeOfString: @ "'"]. Location! = NSNotFound) \t { \t \t return 2; \t} Pour remplacer le code ci-dessus. – Chris