验证文本字段

时间:2014-02-27 10:51:40

标签: objective-c uitextfield

我正在尝试使用范围限制为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];
}

4 个答案:

答案 0 :(得分:0)

您不评估来自BOOL的{​​{1}},因此您只是过滤了长度和0条件。

添加额外的if语句来解决此问题:

[self isNumeric:textField.text];

答案 1 :(得分: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';
    }
}

答案 2 :(得分: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;
}

答案 3 :(得分: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;
}