Убедитесь, что пользователь ввел строку в правильном формате? - PullRequest
0 голосов
/ 25 апреля 2010

Какой лучший способ убедиться, что пользователь ввел правильную строку времени, такую ​​как:

5: 24 5,4

102: 30 102,5

Он будет введен в UITextField, поэтому будет в строке NSString.

Я хочу разрешить пользователю вводить время в часах и минутах (чч: мм) или часах и десятичных минутах (чч.м).

В примере с часами и минутами они должны иметь возможность вводить столько часов, сколько нужно, но только от 0 до 59 минут. С десятичными минутами часов я хочу, чтобы они могли вводить снова столько раз, сколько нужно, но десятичные минуты могут быть только 0 - 9.

Большое спасибо

Ответы [ 3 ]

1 голос
/ 25 апреля 2010

Поскольку я использую 3.1.3, я выполнил быстрый поиск в документации по использованию регулярных выражений со строками, и я придумал это, я просто скопировал то, что было в документации, но добавил eagles 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);
}
1 голос
/ 25 апреля 2010

Почему бы просто не создать объект формата даты и посмотреть, возвращает ли он действительный NSDate?

1 голос
/ 25 апреля 2010

Если вы используете последний не бета SDK (3.2), вы можете использовать регулярные выражения для этого.

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

Non-матчи:

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 " "
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...