1

我试图让以下正则表达式在 ios 上工作,以确保用户只输入数字和一个点。我无法使匹配数超过 0。我也尝试过 NSRange 一个,无论如何它都会给我 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

为什么不使用 stock-standard c 的 regex.h ?

在此处查看示例:http: //cboard.cprogramming.com/c-programming/117525-regex-h-extracting-matches.html

更多信息在这里: https ://stackoverflow.com/a/422159/1208218

于 2012-06-30T01:20:36.727 回答
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 在他们的正则表达式中使用的东西,这有点愚蠢,但没有它就无法工作,所以当它感觉不自然时,我把它留在那里,特别是在 ruby​​ 的例子之后。这个正则表达式将得到分数、小数 -> .3;2.3;2;并从头到尾进行。我认为可能发生的事情是我没有使用 \b 并且也没有正确匹配,这是第二行。无论哪种方式,它现在都很好用。谢谢您的帮助。

于 2012-06-27T14:54:16.363 回答