2014-02-27 140 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; 
}