Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 检查字符串的格式是否为dd.mm.yyyy_Objective C_String_Date_Format - Fatal编程技术网

Objective c 检查字符串的格式是否为dd.mm.yyyy

Objective c 检查字符串的格式是否为dd.mm.yyyy,objective-c,string,date,format,Objective C,String,Date,Format,我想检查字符串的格式是否为dd.mm.yyyy,如 if(myString is in format dd.mm.yyyy) { NSLog(@"Ok"); } else{ NSLog(@"No"); 您可以使用正则表达式来检查它。 例如,此代码使用正则表达式检查“mm.dd.yyyy”: 希望这有帮助 您可以使用Regex来检查它。 例如,此代码使用正则表达式检查“mm.dd.yyyy”: 希望这有帮助 您可以使用如下代码: NSString *dateString = @"01.0

我想检查字符串的格式是否为dd.mm.yyyy,如

if(myString is in format dd.mm.yyyy) {
  NSLog(@"Ok");
}
else{
  NSLog(@"No");

您可以使用正则表达式来检查它。 例如,此代码使用正则表达式检查“mm.dd.yyyy”:


希望这有帮助

您可以使用Regex来检查它。 例如,此代码使用正则表达式检查“mm.dd.yyyy”:


希望这有帮助

您可以使用如下代码:

NSString *dateString = @"01.01.1970"; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"dd.MM.yyyy";
if ([dateFormatter dateFromString:dateString]) {
    //YES
}
为什么
NSDateFormatter
:创建它是为了分析日期。另外,通过这种方式,您可以轻松地更改日期格式,并且作为一种副作用,您可以使用有效的
NSDate
对象

但是,如果您打算经常使用此
dateFormatter
(例如,它在
UITableViewCell
中使用),则可能会遇到性能问题。如果您这样做了,并且您确信是
NSDateFormatter
导致了它(这里的工具可能会帮助您),您可以重用
dateFormatter
。例如,像这样:

NSString *dateString = @"01.01.1970"; 
static NSDateFormatter *dateFormatter = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat = @"dd.MM.yyyy";
});

if ([dateFormatter dateFromString:dateString]) {
    //YES
}
似乎(根据我运行的测试,我猜是这样的)对
dateFromString
的第一次调用会触发
dateFormatter
中的延迟初始化,并且需要一些时间(下面是一些测试结果)。如果重用它,则只执行一次初始化

在我的iOS 8.4.1版iPhone 5S上,
dispatch\u once
版本的运行速度大约快10倍:

调度一次
:0.536秒,娱乐:5.475秒 (分析10000个日期的时间)

在同一测试中,@zaph的iPhone 6S与iOS 9.x的性能相差2倍:

调度一次
:0.57秒,娱乐:1.01秒 (分析10000个日期的时间)

因此,这取决于设备、操作系统版本以及使用dateFormatter的强度。在某些情况下,第二个代码片段可能是杀伤力过大。但我遇到的情况是,它显著提高了性能


UPD:还请注意,美国日期通常也用点作为分隔符,因此看起来是
dd.MM.yyyy
日期实际上可能是
MM.dd.yyyy
日期(例如,4月5日而不是5月4日)。对于日期
dd>12
而言,这不是问题,但在其他方面则是问题。但是,我认为如果没有额外的上下文,您无法对此采取任何措施,因此请注意。

您可以使用如下代码:

NSString *dateString = @"01.01.1970"; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"dd.MM.yyyy";
if ([dateFormatter dateFromString:dateString]) {
    //YES
}
为什么
NSDateFormatter
:创建它是为了分析日期。另外,通过这种方式,您可以轻松地更改日期格式,并且作为一种副作用,您可以使用有效的
NSDate
对象

但是,如果您打算经常使用此
dateFormatter
(例如,它在
UITableViewCell
中使用),则可能会遇到性能问题。如果您这样做了,并且您确信是
NSDateFormatter
导致了它(这里的工具可能会帮助您),您可以重用
dateFormatter
。例如,像这样:

NSString *dateString = @"01.01.1970"; 
static NSDateFormatter *dateFormatter = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat = @"dd.MM.yyyy";
});

if ([dateFormatter dateFromString:dateString]) {
    //YES
}
似乎(根据我运行的测试,我猜是这样的)对
dateFromString
的第一次调用会触发
dateFormatter
中的延迟初始化,并且需要一些时间(下面是一些测试结果)。如果重用它,则只执行一次初始化

在我的iOS 8.4.1版iPhone 5S上,
dispatch\u once
版本的运行速度大约快10倍:

调度一次
:0.536秒,娱乐:5.475秒 (分析10000个日期的时间)

在同一测试中,@zaph的iPhone 6S与iOS 9.x的性能相差2倍:

调度一次
:0.57秒,娱乐:1.01秒 (分析10000个日期的时间)

因此,这取决于设备、操作系统版本以及使用dateFormatter的强度。在某些情况下,第二个代码片段可能是杀伤力过大。但我遇到的情况是,它显著提高了性能


UPD:还请注意,美国日期通常也用点作为分隔符,因此看起来是
dd.MM.yyyy
日期实际上可能是
MM.dd.yyyy
日期(例如,4月5日而不是5月4日)。对于日期
dd>12
而言,这不是问题,但在其他方面则是问题。但是,我认为如果没有额外的上下文,您无法对此做任何事情,因此请注意。

您可以使用正则表达式:

NSString *testString = @"11.22.3333";

NSString *pattern = @"^\\d{2}\\.\\d{2}\\.\\d{4}$";
NSRange range = [testString rangeOfString:pattern options:NSRegularExpressionSearch];
if (range.location != NSNotFound) {
    NSLog(@"Ok");
}
else{
    NSLog(@"No");
}

位,这不是一个好的日期测试。

您可以使用正则表达式:

NSString *testString = @"11.22.3333";

NSString *pattern = @"^\\d{2}\\.\\d{2}\\.\\d{4}$";
NSRange range = [testString rangeOfString:pattern options:NSRegularExpressionSearch];
if (range.location != NSNotFound) {
    NSLog(@"Ok");
}
else{
    NSLog(@"No");
}

这不是一个好的日期测试。

使用
NSDateFormatter
。使用
NSDateFormatter
。为什么不使用
NSDateFormatter
?那个regex真是疯了。它能处理闰年吗?@rmaddy:在这种情况下(仅“mm.dd.yyyy”),我认为NSDateFormatter是正确的选择。但是,如果要允许选中“mm/dd/mmmm”、“mm-dd-yyyy”,。。。试着用正则表达式,嗯
NSDateFormatter
是正确的选择,无论日期格式如何。这就是它的目的。@Franken,但OP想要的是“dd.mm.yyyy”,而不是“mm.dd.yyyy”:)并且有一个问题:将此regexp重写为“dd.mm.yyyy”的regexp(实际上是mm,不是mm,但没关系)是。。。棘手:)尤其是在你写了半年之后。尽管如此,我还是同意,可以使用regexp检查日期是否以多种格式有效。但是这会使这个regexp更大、更可怕,所以如果是我的话,我不会使用它:)此外,您的regexp认为
02.29.2015
是一个有效日期。这是错误的,因为它不是闰年。regexp很棘手:)@Franken,而
0001
则是一个“正确”的日期。下面是可视化调试器中的regexp:为什么不使用
NSDateFormatter
?那个regex真是疯了。它能处理闰年吗?@rmaddy:在这种情况下(仅“mm.dd.yyyy”),我认为NSDateFormatter是正确的选择。但是,如果要允许选中“mm/dd/mmmm”、“mm-dd-yyyy”,。。。尝试使用注册表