我想檢查一個字符串是否在格式DD.MM.YYYY,像檢查字符串格式DD.MM.YYYY
if(myString is in format dd.mm.yyyy) {
NSLog(@"Ok");
}
else{
NSLog(@"No");
我想檢查一個字符串是否在格式DD.MM.YYYY,像檢查字符串格式DD.MM.YYYY
if(myString is in format dd.mm.yyyy) {
NSLog(@"Ok");
}
else{
NSLog(@"No");
可以使用正則表達式來檢查它。 例如該代碼使用正則表達式來檢查「MM.DD.YYYY」:
NSError *error = NULL;
NSString *expForreg = @"^((((0[13578])|([13578])|(1[02]))[\\.](([1-9])|([0-2][0-9])|(3[01])))|(((0[469])|([469])|(11))[\\.](([1-9])|([0-2][0-9])|(30)))|((2|02)[\\.](([1-9])|([0-2][0-9]))))[\\.]\\d{4}$|^\\d{4}$";
NSRegularExpression *regex = [NSRegularExpression
regularExpressionWithPattern:expForreg
options:NSRegularExpressionCaseInsensitive
error:&error];
NSArray *matches = [regex matchesInString:@"10.30.1989" options:0 range:NSMakeRange(0, [@"10.30.1989" length])];
if(matches && matches.count > 0)
{
NSLog(@"Ok");
}else
{
NSLog(@"No");
}
希望這有助於!
您可以使用這樣的代碼:
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
內延遲初始化,它需要一定的時間(幾個測試結果下面)。如果您重新使用它,NSDateFormatter
初始化只執行一次。
在我與iOS iPhone 5S 8.4.1版本dispatch_once
工作快約10倍:
dispatch_once
:0.536秒,娛樂:5.475秒 (時間解析10.000日期)
在相同的測試@zaph了與iOS 9.x中對他的iPhone 6S 2倍的性能差異:
dispatch_once
:0.92秒,遊憩:1.01秒 (時間解析10.000日期)
所以,這取決於設備,操作系統版本上和你打算如何集中使用該dateFormatter。在某些情況下,第二個代碼片段可能是過度殺傷性的。但是我遇到了能夠顯着提升性能的情況。
我無法想象爲什麼有人會投票回答這個問題 – rmaddy
創建' NSDateFormatter'? – zaph
@zaph,它的價格非常昂貴,例如'cellForRowAtIndexPath'中不是你想要做的事情。因爲它遇到令人失望的表現)。我將在一分鐘內通過一個小演示和一個測試結果更新我的答案。 – FreeNickname
您可以使用正則表達式:
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'。 – rmaddy