2010-04-06 3 views
1

Я проверяю NSString, чтобы гарантировать, что строка не содержит апострофы.Validate NSString

код, я использую, чтобы сделать это

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; 
} 

Возвращение 2 представляет ошибку. Этот код работает, за исключением случая, когда строка является апострофом.

Чтобы обойти эту проблему, я добавил следующий код над предыдущим блоком.

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

Этот код оценивается в true, независимо от его ввода. Мне нужно либо предотвратить сбой первого блока с помощью ввода ', либо заставить второй блок работать.

Что мне не хватает?

+0

@ Крис: Вы также можете построить ответ Чак, если у вас есть набор символов, которые вам нужно проверить. Итак, если вы создаете NSCharacterSet со всеми незаконными символами, вы можете сделать что-то вроде if (([string rangeOfCharacterFromSet: invalidSet]). Location! = NSNotFound) // сделать что-то –

ответ

3

Не существует логической причины, по которой тест isEqualToString: всегда должен быть успешным. Если это ваш фактический, скопированный код, вы должны иметь ошибку где-то еще в функции.

Во всяком случае, было бы намного проще проверить, находится ли [string rangeOfString:@"'"]NSNotFound.

+0

Я знал, что мне не хватает чего-то простого! Я использовал , если ([string rangeOfString: @ "'"]. Location! = NSNotFound) \t { \t \t return 2; \t} Для замены вышеуказанного кода. – Chris

Смежные вопросы