UITextField日期格式检查

时间:2014-04-07 10:25:48

标签: ios objective-c uitextfield

我有3 UITextField接收用户输入。 UITextField代表

我想知道如何限制用户输入错误的值到这些UITextField

例如,天数(1-31);如果用户先输入9,则他无法输入任何其他内容,因为9是该月中唯一的一天。

或者另一个例子是(1-12);如果用户键入5这是他们唯一的选择吗?

4 个答案:

答案 0 :(得分:2)

您需要实施UITextFieldDelegate以在用户输入过程中处理文本更改,以便您接受所需的字符并拒绝不需要的字符。

您可以使用NSRegularExpression来检查它是否与日,月或年模式匹配。

this

中描述

答案 1 :(得分:1)

您可以使用委托作为此选项来获得所需的功能。

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

BOOL returnValue = NO;
NSMutableString *stringValue = [NSMutableString stringWithString:[textField text]];
[stringValue insertString:string atIndex:range.location];

if(textField == dayField){
    if([stringValue intValue]>=0 && [stringValue intValue]<=31 && [stringValue intValue])
        returnValue = YES;
}

if(textField == monthField){
    if([stringValue intValue]>=0 && [stringValue intValue]<=12 && [stringValue intValue])
        returnValue = YES;
}

return returnValue;

}

这也将检查仅限数字的情况。

答案 2 :(得分:0)

您最好将UIPickerView与有效日期,月份和年份一起用作数据源。 It should be good start

修改

根据下面的讨论,我建议你制作一个固定长度的UITextFields,一旦文本结束编辑,就比较数字:

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{
    NSUInteger newLength = [textField.text length] + [string length] - range.length;

    if([textField isEqual:DayTextField])   // `DayTextField` refers to textfield that represents day
    {
        return (newLength > 2);
    }
    // else if .....

    return NO;
}

-(BOOL)textFieldShouldReturn:(UITextField *)textField 
{
   if([textField isEqual:DayTextField])
   {
       int val = [textField.text integerValue];
       if( 1 <= val <= 31)
       {
           NSLog(@"Valid range");
       }
       else
       {
           NSLog(@"Invalid range");          
           // clear day textfield
       }
   }
}

答案 3 :(得分:0)

对您而言,解决方案是为每个TextField&amp;分配一个Tag值。然后符合UITextFieldDelegate&amp;遵循此实施。

  • 你必须在月份和时间做这样的事情。年文本也是如此。方法很简单。
  • 如果用户在一天内输入除123以外的任何内容,则应仅允许他输入1位数字。
  • 如果用户输入集合123中的任何数字,则应允许他输入2位数字。

    -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    
    if(textField.tag == kTagDayText){
    if([textField.text length] <=2){
        if([textField.text length] == 1){
            NSCharacterSet *monthTwoDigitsNumbers = [NSCharacterSet characterSetWithCharactersInString:@"123"];
            NSCharacterSet *characterSetTwoDigit = [NSCharacterSet characterSetWithCharactersInString:textField.text];
    
            BOOL stringIsValid = [monthTwoDigitsNumbers isSupersetOfSet:characterSetTwoDigit];
            return stringIsValid;
        }else {
            NSCharacterSet *monthOneDigitsNumbers = [NSCharacterSet characterSetWithCharactersInString:@"456789"];
            NSCharacterSet *characterSetOneDigit = [NSCharacterSet characterSetWithCharactersInString:textField.text];
    
            BOOL stringIsValid = [monthOneDigitsNumbers isSupersetOfSet:characterSetOneDigit];
            return stringIsValid;
        }
      }
    }
    
    return ([string stringByTrimmingCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]].length > 0) || [string isEqualToString:@""];
    
    }
    

希望能给出一些想法。