2014-02-27 138 views
0

我想驗證我的文本字段的響鈴極限爲5,也不允許在開始字符只插入0值,我也想限制我的文本字段與特殊字符,下面是我的代碼我的兩個功能範圍限制和起始字符0接受工作正常,但特殊字符的禁止不起作用可以請你建議我有什麼問題?驗證的文本字段

- (BOOL)textField:(UITextField *)textField 
shouldChangeCharactersInRange:(NSRange)range 
    replacementString:(NSString *)string { 

       [self isNumeric:textField.text]; 

       NSUInteger newLength = [textField.text length] + [string length] - range.length; 

       if (range.location == 0 && [string isEqualToString:@"0"]) { 
        return NO; 
       } 
       return (newLength > 5) ? NO : YES; 

     } 


-(BOOL)isNumeric:(NSString*)inputString{ 

    NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_NUMBERS] invertedSet]; 
    NSString *filtered = [[inputString componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""]; 
    return [inputString isEqualToString:filtered]; 
} 
+0

我編輯了我的答案。檢查它並讓我知道。 –

回答

0

我想你想要的是限制5個數字字母,但0不能成爲第一個數字:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range 
replacementString:(NSString *)string{ 
    NSString *resultStr = [textField.text stringByReplacingCharactersInRange:range withString:string]; 
    if([self isNumeric:resultStr]){ 
     if(resultStr.length <= 5){ 
      if(resultStr.length >= 1){ 
        NSString *firstLetter = [resultStr substringWithRange:NSMakeRange(0, 1)]; 
        if(![firstLetter isEqualToString:@"0"]){ 
         return YES; 
        } 
      } 
      else{ 
        return YES; 
      } 
     } 
    } 

    return NO; 
} 
0

你不評價BOOL[self isNumeric:textField.text];來了,所以你只是過濾長度 - 和0條件。

添加一個額外的if語句來解決這個問題:

if (![self isNumeric:textField.text]) { 
    return NO; 
) 
0

嘗試下面的代碼,讓我知道這將有助於與否: -

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    if([self isNumeric:string]) 
    { 
     if([textField.text length]==0 && [string length]==1 && [string isEqualToString:@"0"]) 
     { 
      return NO; 
     } 

     if([textField.text length]==5 && ![string isEqualToString:@""]) 
      return NO; 
    } 
    else 
    { 
     return NO; 
    } 
} 

-(BOOL)isNumeric:(NSString*)inputString{ 
    NSCharacterSet *acceptableCharacterSet = [NSCharacterSet characterSetWithCharactersInString: ACCEPTABLE_NUMBERS]; 

    unichar c = [self getLastAddedStringAsCharacter:inputString]; 

    if ([acceptableCharacterSet characterIsMember:c]){ 
     return YES; 
    } 
    else if ([inputString isEqualToString:@""]){ 
     return YES; 
    } 
    else{ 
     return NO; 
    } 
} 

-(unichar)getLastAddedStringAsCharacter:(NSString *)lastStr{ 
    if ([lastStr length]>0){ 
     return [lastStr characterAtIndex:0]; 
    } 
    else{ 
     return '\0'; 
    } 
} 
0

檢查的一種

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSString *currentString = [textField.text stringByReplacingCharactersInRange:range withString:string]; 
    int length = [currentString length]; 
    if (length > 5) { 
     return NO; 
    } 
    else if ([textField.text isEqual: @"0"]){ 
     return N); 
    } 
    return YES; 
}