确保用户输入的字符串格式正确吗?

时间:2010-04-24 20:42:57

标签: iphone time nsstring

确保用户输入有效时间字符串的最佳方式,例如:

5:24 5.4

102:30 102.5

它将被输入到UITextField中,因此将在NSString中。

我希望允许用户以小时和分钟(hh:mm)或小时和小数分钟(hh.m)输入时间。

在小时分钟示例中,他们应该可以输入尽可能多的小时数,但只能在0到59分钟之间输入。使用十进制小时分钟,我希望它们只能再次输入数小时,但十进制分钟只能是0 - 9.

非常感谢

3 个答案:

答案 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