請告訴我,以確保用戶的最佳方式已經進入了一個有效的時間字符串,如:確保用戶輸入正確格式的字符串?
5:24 5.4
102:30 102.5
它將被輸入到的UITextField因此將在NSString中。
我想讓用戶以小時和分鐘(hh:mm)或小時和小數分鐘(hh.m)輸入時間。
在小時分鐘示例中,他們應該能夠輸入儘可能多的小時數,但只能在0到59分鐘之間。隨着時間的小數分鐘,我希望他們只能再次進入儘可能多小時,因爲等,但是小數分只能是0 - 9
非常感謝
請告訴我,以確保用戶的最佳方式已經進入了一個有效的時間字符串,如:確保用戶輸入正確格式的字符串?
5:24 5.4
102:30 102.5
它將被輸入到的UITextField因此將在NSString中。
我想讓用戶以小時和分鐘(hh:mm)或小時和小數分鐘(hh.m)輸入時間。
在小時分鐘示例中,他們應該能夠輸入儘可能多的小時數,但只能在0到59分鐘之間。隨着時間的小數分鐘,我希望他們只能再次進入儘可能多小時,因爲等,但是小數分只能是0 - 9
非常感謝
如果您使用的是最新的非測試版SDK (3.2),您可以使用regular expressions。
NSString *myString = @"5:24";
NSString *myRegex = @"^\\d+(?:[:](?:[0-5]?\\d)|\\.\\d)$";
NSRange myRange = [myString rangeOfString:myRegex options:NSRegularExpressionSearch];
if (myRange.location != NSNotFound)
// the string is valid
else
// the string is invalid
匹配:
5:12
5:1
5:01
5:0
5:00
1234567:12
0:0
5.1
5.0
0.1
0.0
1234567.1
不匹配:
5 // symbol required (i.e. ":" or ".")
5: // minutes are required
5:123 // too many minutes, max is 2 digits
5:67 // minutes can only be up to 59
-5:12 // negative numbers aren't allowed
5. // minutes are required
5.12 // too many minutes, max is 1 digit
:12 // hours are required
.12 // hours are required
5.1a // string must not contain "a"
5.1 // string must not contain whitespace " "
由於我使用的是3.1.3,我沒有在文檔中快速搜索字符串使用正則表達式我想到了這一點,我只是複製了文檔中的內容,但添加了eagles正則表達式,但我添加了一個\\,因爲它們在文檔中所做的工作似乎有效,但由於我對正則表達式不瞭解ssions我不知道如果這是正確的,如果它應該工作,請指教(在同時,我將開始在正則表達式閱讀起來):
NSArray *array = [NSArray arrayWithObjects: @"5:24", @"5.4", @"e3:32", @"1023:90", @"3432.2", nil];
NSPredicate *timePred = [NSPredicate predicateWithFormat:@"SELF MATCHES '^\\\\d+(?:[:](?:[0-5]?\\\\d)|\\\\.\\\\d)$'"];
NSArray *filteredArray = [array filteredArrayUsingPredicate:timePred];
for (NSString *oneString in filteredArray) {
NSLog(@"%@", oneString);
}
爲什麼不只是創建的日期格式對象,看看它會返回一個有效的NSDate
?
保羅,感謝您的答覆,但我不認爲NSDate將接受超過23小時,如果我想把102:32。如果我錯了,請糾正我的錯誤! – 2010-04-24 22:22:36
我很想說創建NSFormatter的自定義子類,但在這種情況下,我懷疑正則表達式解決方案是要走的路。 – 2010-04-24 22:49:38
感謝您的建議:-) – 2010-04-24 22:50:53
這看起來不錯,但不幸的是,它的iPhone 3.1.3 – 2010-04-24 21:28:41