2013-01-07 82 views
0

我有一個NSString具有用戶輸入UITextField值,在這裏,我需要驗證字符串是否只包含像目標C的NSString驗證

'a to z' , 'A to z' , '1 to 9'. 

我不想除了這些之外的任何其他字符值.. 。請幫助我... 我使用NSNumberFormatter用於Numbers,NSScanner用於Strings,但是如何一次驗證兩者。

回答

4

UITextField代表和粘貼下面的代碼: -

//在-init,-initWithNibName:捆綁:,或類似

NSCharacterSet *blockedCharacters = [[[NSCharacterSet alphanumericCharacterSet] invertedSet] retain]; 

- (BOOL)textField:(UITextField *)field shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)characters 
{ 
    return ([characters rangeOfCharacterFromSet:blockedCharacters].location == NSNotFound); 
} 

//在-dealloc

[blockedCharacters release]; 

希望它可以幫助你

+0

我怎樣才能讓'_','@'...? –

+0

@HarishSaran檢查你有問題的問題 –

+0

如果你只是想輸入你允許的字符,你可以使用'characterSetWithCharactersInString:'。如果你喜歡Prateek的解決方案的結果,但只是想添加_和@你可以使用NSMutableCharacterSet(只是'union'將它們放在一起,使用'characterSetWithCharactersInString:'做第二個集合。很難從文檔確定,但我很確定'alphanumericCharacterSet'會包含你通常不認爲是az的東西,比如ç – MaxGabriel

1

你可以使用一個NSRegularExpression,比如s o:

NSString *string1 = @"abc123"; 
    NSString *string2 = @"!abc123"; 
    NSError *error = NULL; 
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^a-z0-9]" options:NSRegularExpressionCaseInsensitive error:&error]; 

    NSUInteger numberOfMatches = [regex numberOfMatchesInString:string1 options:0 range:NSMakeRange(0, [string1 length])]; 
    NSLog(@"string 1 matches: %ld", numberOfMatches); 

    numberOfMatches = [regex numberOfMatchesInString:string2 options:0 range:NSMakeRange(0, [string1 length])]; 
    NSLog(@"string 2 matches: %ld", numberOfMatches); 

並更改模式@"[^a-z0-9]"以適合您要檢查的字符。 ^的意思是「不在這個集合中」,所以如果發現任何匹配,該字段應該失敗驗證。