确保用户输入有效时间字符串的最佳方式,例如:
5:24 5.4
102:30 102.5
它将被输入到UITextField中,因此将在NSString中。
我希望允许用户以小时和分钟(hh:mm)或小时和小数分钟(hh.m)输入时间。
在小时分钟示例中,他们应该可以输入尽可能多的小时数,但只能在0到59分钟之间输入。使用十进制小时分钟,我希望它们只能再次输入数小时,但十进制分钟只能是0 - 9.
非常感谢
答案 0 :(得分:1)
如果您使用的是最新的非beta 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 " "
答案 1 :(得分:1)
当我使用3.1.3时,我在文档中快速搜索了使用带有字符串的正则表达式,我想出了这个,我只是复制了文档中的内容但添加了egeles regex但是我添加了一个加载他们在文档中做了什么似乎工作,但由于我不知道正则表达式,我不知道这是否正确,如果它应该工作,请告知(同时我将开始阅读正则表达式):
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);
}
答案 2 :(得分:1)
为什么不创建一个日期格式对象,看看它是否返回有效的NSDate
?