1

私のニーズを満たす良い正規表現を書くことができないという問題に直面しました。私はこれまで正規表現を使用したことがないので、それは私にとって大きな驚きではありませんでした。

これが私が検証しようとしている良い入力例です:

  • 01
  • 00:01
  • 01:02:03
  • 01:02:03:04-最大3つのコロンが可能
  • 123,456,789-最大2つのコンマが可能
  • 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]が含まれます

基本的にコロンで区切られた入力は別々の値になり、他のすべては1つの値になります

4

1 に答える 1

0

目的を達成するために、検証のためにケースごとに 1 つ実行することをお勧めします。

検証

コロン:

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

カンマ:

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

数字だけ:

^\d+$

次に、各ケースの検証に合格したと仮定して、データ抽出に別のものを使用します。

データ抽出

コロン

カンマ:

数字だけ:

  • 必要なものはここにあるので、変更する必要はありません。
于 2013-03-04T22:13:16.710 に答える