正则表达式匹配数始终为零

时间:2018-03-15 11:57:21

标签: objective-c regex

我想检查一个格式为“G12-123456”的UITextField文本。 规则很简单;
第一个字符必须是大写字母。
第二和第三必须是数字 第四个必须是“ - ”字符 最后六个必须只是数字 下面的代码不起作用,匹配数总是返回零。

我也试过正则表达式为“[A-Z0-9] {3} - [0-9] {6}”

NSString * myRegex = @"[A-Z][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]";

NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:myRegex
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                         error:&error];
NSUInteger numberOfMatches = [regex numberOfMatchesInString:string
                                                    options:NSMatchingReportProgress
                                                      range:NSMakeRange(0, [string length])];

这个使用相同的代码[^ a-zA-Z0-9] - >检查NSString是否包含特殊字符和数字。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

首先,基本上你的代码应该有效。

然而,两种选择都是荒谬的。如果要检查大写字母,则不得传递NSRegularExpressionCaseInsensitiveNSMatchingReportProgress仅影响基于块的API。

在两种情况下都通过0.

可以更高效地编写模式

NSString *myRegex = @"[A-Z]\\d{2}-\\d{6}";

NSError *error;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:myRegex
                                                                       options:0
                                                                         error:&error];
if {error) {
    NSLog(@"%@", error);
} else {
    NSUInteger numberOfMatches = [regex numberOfMatchesInString:string
                                                    options:0
                                                      range:NSMakeRange(0, [string length])];

    NSLog(@"%lu", numberOfMatches);
}

如果正则表达式必须匹配整个字符串,请添加起始端锚点。

NSString *myRegex = @"^[A-Z]\\d(2)-\\d{6}$";

如果numberOfMatches为零,请检查连字符是否为标准字符(ASCII 45,十六进制0x2D)。