1

刚刚面临无法编写满足我需求的良好正则表达式的问题。我以前从未使用过正则表达式,所以这对我来说并不是一个大惊喜。

以下是我要验证的良好输入示例:

  • 01
  • 00:01
  • 01:02:03
  • 01:02:03:04 - 最多 3 个冒号
  • 123,456,789 - 最多两个逗号
  • 40000035
  • 1:2:06

以下是不好的:

  • ,3234
  • 134,2343,333
  • 000:01:00
  • :01:03:00
  • :01
  • 01:

首先,我尝试编写一个至少涵盖所有冒号的情况,这就是我所拥有的:

NSUInteger numberOfMatches = -1;

NSError *error = NULL;

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"([([0-9]{1,2}):]{1,3})([0-9]{1,2})"
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                       error:&error];
if (error) {
    NSLog(@"error %@", error);
}

numberOfMatches = [regex numberOfMatchesInString:stringToValidate
                                         options:0
                                           range:NSMakeRange(0, [stringToValidate length])];

我也很好奇 NSRegularExpression 是否有任何方法可以在某种数组中提取经过验证的子字符串?!

例如:

12:23:63 --- 将被验证并且数组将包含 [12,23,63]

234 --- 将被验证并且数组将包含 [234]

123,235,653 --- 将被验证并且数组将包含 [123235653]

基本上冒号分隔的输入将作为单独的值,其他所有内容将作为一个值

4

1 回答 1

0

为了达到你想要的效果,我建议你为每个案例做一个验证。

验证

冒号:

^\d{1,2}(?::\d{1,2}){0,2}(?::\d{2})?$

逗号:

^\d{3}(?:,\d{3}){0,2}$

只是数字:

^\d+$

然后假设您通过了每个案例的验证,使用其他东西进行数据提取。

数据提取

冒号

逗号:

只是数字:

  • 好吧,你在这里有你需要的东西,所以不需要做任何改变。
于 2013-03-04T22:13:16.710 回答