【问题标题】:Validation for input string is Date or not?输入字符串的验证是否为日期?
【发布时间】:2013-07-24 07:25:37
【问题描述】:

我有一个文本字段,用户可以在其中输入他们的出生日期,现在我想在保存到数据库之前确定输入是否为日期格式。我经历了 SO ,但我仍然没有得到答案。谁能告诉我如何验证(是日期)输入。

日期格式为 MM/DD/YYYY

注意:我不希望用户通过日期选择器选择日期。

【问题讨论】:

  • 我认为没有简单的方法可以做到这一点。您必须将 NSString 分成由 / 分隔的组件。而不是必须对每个组件的长度和价值进行单独验证。
  • 我知道日期格式,但问题是用户可能会给出像“1122344”这样的值
  • 立即查看我的编辑答案

标签: ios nsdate


【解决方案1】:

试试这个

NSString *dateFromTextfield = @"07/24/2013";

   // Convert string to date object
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"MM/dd/yyyy"];// here set format which you want...
    NSDate *date = [dateFormat dateFromString:dateFromTextfield]; 
    [dateFormat release];

然后检查

//set int position to 2 and 5  as it contain / for a valid date
unichar ch = [dateFromTextfield characterAtIndex:position];
NSLog(@"%c", ch);

if (ch == '/') 
{
 //valid date
}
else
 { 
 //not a valid date
} 

【讨论】:

  • 我知道这一点,让我们假设 dateFromTextfield= @"123.456" 你如何检查 dateFromTextfield 是否是有效日期
  • if (date == nil) { NSLog(@"Date not valid"); }
  • 类似这样的 NSString *validationconditiontobematch = @"[0-9/]{1,8})";
  • @surendher 1) 如果我将 dateFromTextfield 的输入设为“07/”。它会使应用程序崩溃。 2) 用户也可以输入数字和/以外的输入(如“Cr/sh/”)。请回答我。
  • Vijay 确定它需要添加验证检查我以前的评论
【解决方案2】:

Convert string to date in my iPhone app

然后检查它是否为零。也许还检查它是否在您的应用程序的合理范围内

【讨论】:

    【解决方案3】:

    首先,使用UIDatePicker,因为它是专门为此设计的,这是在iOS平台上选择日期的一种自然方式。 无论如何,如果您想检查来自UITextField 的字符串是否为日期,请将其格式化(使用格式化程序)并根据格式化程序获取日期

    NSString *dateAsString = @"2010-05-24" // string from textfield
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    NSDate * dateFromString = [myDateFormatter dateFromString:dateAsString];
    

    如果NSDate 不为零,那么没关系,否则有问题:用户键入的不是日期或用户键入的日期格式错误。

    尝试为用户提供提示,例如:“日期应具有格式:yyyy-dd-MM”

    【讨论】:

      【解决方案4】:
      NSString *dateFromTextfield = @"07/24/2013";
      
      //Extra validation, because the user can enter UTC date as completely in textfield,
      //Here i assumed that you would expect only string lenth of 10 for date
      //If more than digits then invalid date.
      if ([dateFromTextfield length]>10) {
      
          //Show alert invalid date
      
          return;
      
      }
      
      //If you give the correct date format then only date formatter will convert it to NSDate. Otherwise return nil.
      //So we can make use of that to find out whether the user has entered date or not.
      
      NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
      [dateFormat setDateFormat:@"MM/dd/yyyy"];
      NSDate *date = [dateFormat dateFromString:dateFromTextfield];
      [dateFormat release];
      
      //If date and date object is kind of NSDate class, then it must be a date produced by dateFormat.
      if (date!=nil && [date isKindOfClass:[NSDate class]]) {
      
          //User has entered date
          // '/' and numbers only entered
      
      }
      else{
      
          //Show alert invalid date
      
          //Other than that date format.
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-05
        相关资源
        最近更新 更多