2010-04-06 51 views
1

我正在驗證NSString以確保該字符串不包含撇號。驗證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

@Chris:如果你有一套你需要檢查的角色,你也可以建立在Chuck的答案上。所以,如果你建立一個包含所有非法字符的NSCharacterSet,你可以像if(([string rangeOfCharacterFromSet:invalidSet])。location!= NSNotFound)//做某事 – 2010-04-06 20:31:36

回答

3

爲什麼isEqualToString:測試總是要成功沒有合乎邏輯的原因。如果這是您的實際複製粘貼代碼,則您必須在函數的其他位置出現錯誤。

無論如何,測試[string rangeOfString:@"'"]的位置是否爲NSNotFound會更簡單。

+0

我知道我錯過了一些簡單的東西!我使用了 if([string rangeOfString:@「'」]。location!= NSNotFound) \t { \t \t return 2; \t} 替換上面的代碼。 – Chris 2010-04-06 19:48:44