1

ユーザーが数字とドットのみを入力していることを確認するために、次の正規表現をiOSで動作させるようにしています。一致数を0より大きくすることができません。NSRange1も試しましたが、何があっても0になるので、正規表現が機能していません。私がそこに持っているもの。助言がありますか。

私が書いたコードはここにあり、errorRegexは.hファイルで定義されており、regErrorも定義されています。

errorRegex = [NSRegularExpression regularExpressionWithPattern:@"[^0-9.]*" 
            options: NSRegularExpressionCaseInsensitive error:&regError];

NSUInteger rangeOfFirstMatch = [errorRegex numberOfMatchesInString:servAmount1TF.text 
            options:0 range:NSMakeRange(0, [servAmount1TF.text length])];
4

3 に答える 3

1

errorRegexはタイプNSRegularExpressionですが、エラーはタイプUIButtonContentです。これには、メモリエラーのすべての特徴があります。コード内の何かが適切な保持/リリースサイクルを通過していません。


式@"[^0-9。]+"で動作する単体テストを取得しました

- (void)testRE
{
    NSError *regError = nil;
    NSRegularExpression *errorRegex;
    NSString *string;
    NSUInteger count;

    errorRegex = [NSRegularExpression regularExpressionWithPattern:@"[^0-9.]+" 
                                                           options: NSRegularExpressionCaseInsensitive
                                                             error:&regError];
    STAssertNil(regError, nil);

    string = @"00.0";
    count = [errorRegex numberOfMatchesInString:string 
                                        options:0
                                          range:NSMakeRange(0, [string length])];
    STAssertEquals(count, 0U, nil);

    string = @"00A00";
    count = [errorRegex numberOfMatchesInString:string 
                                        options:0
                                          range:NSMakeRange(0, [string length])];
    STAssertEquals(count, 1U, nil);
}
于 2012-06-04T17:02:13.803 に答える
1
NSRegularExpression *errorCheckRegEx = [[NSRegularExpression alloc] initWithPattern:@"\\b^([0-9]+(\\.)?[0-9]*)$|^([0-9]*(\\.)?[0-9]+)$|^[0-9]*$|^([0-9]*(\\/)?[0-9]*)$\\b" options:NSRegularExpressionCaseInsensitive error:nil];
[match setArray: [errorCheckRegEx matchesInString:servAmount1TF.text options:0 range:NSMakeRange(0, [servAmount1TF.text length])]];

私は最終的にそれに戻ることができたときに私が何をする必要があるかを理解したので、誰かが興味を持っていればこれが私が思いついたものです。\ bは、iOSが正規表現で使用しているものです。これは一種の馬鹿げていますが、それなしでは機能しないので、特にルビーの例の後で、自然にできない場合はそのままにしておきます。この正規表現は、分数、小数->.3を取得します。2.3; 2; そして、ラインの前から最後までそれを行います。私が起こっていたのは、\ bを使用しておらず、正しく一致していないという事実でした。これは2行目です。いずれにせよ、今ではうまく機能しています。助けてくれてありがとう。

于 2012-06-27T14:54:16.363 に答える
1

在庫標準のcの正規表現を使用してみませんか?

ここで例を参照してください:http: //cboard.cprogramming.com/c-programming/117525-regex-h-extracting-matches.html

そしてここでより多くの情報: https ://stackoverflow.com/a/422159/1208218

于 2012-06-30T01:20:36.727 に答える