2010-04-06 3 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; 
} 

반환이 오류를 나타냅니다이다. 이 코드는 문자열이 아포스트로피 인 경우를 제외하고는 작동합니다.

이 문제를 해결하기 위해 앞의 블록 위에 다음 코드를 추가했습니다.

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

이 코드는 입력에 관계없이 true로 평가됩니다. 나는 첫 번째 블록이 ''의 입력과 충돌하는 것을 방지하거나 두 번째 블록이 작동하도록해야합니다.

무엇이 누락 되었습니까?

+0

@Chris : 확인해야 할 문자 세트가있는 경우 Chuck의 답변도 작성할 수 있습니다. 그래서, 모든 불법 문자로 NSCharacterSet을 구축한다면 if (([string rangeOfCharacterFromSet : invalidSet]). location! = NSNotFound) // do something –

답변

3

isEqualToString: 테스트가 항상 성공해야하는 논리적 근거는 없습니다. 이것이 실제 복사 된 코드 일 경우 함수의 다른 부분에 오류가 있어야합니다.

어쨌든 [string rangeOfString:@"'"]의 위치가 NSNotFound 일 경우 훨씬 더 간단합니다.

+0

나는 간단한 것을 놓친다는 것을 알았습니다! 내가 사용했다 if ([string rangeOfString : @ " '"]. 위치! = NSNotFound) \t { \t \t return 2; \t} 위의 코드를 바꿉니다. – Chris

관련 문제