具有可选十进制值的数字的正则表达式,固定为两个位置?

时间:2015-04-01 19:58:41

标签: objective-c regex nsregularexpression

我需要知道字符串是否采用以下格式:

  1. 任意数量的整数后跟:
  2. 可选组:
  3. 小数后跟两位数字(如果提供小数则需要)
  4. 这允许任意数量的数字,我认为它的格式正确,允许包含句点后跟两位数的可选组,但由于某种原因,这不允许使用小数。也许十进制没有被适当地转义?

    @"^[0-9]+(\\.[0-9][0-9])?$"
    

    我尝试@"^[0-9]+(\.[0-9][0-9])?$"但是Xcode会抛出编译时警告:Unknown escape sequence \.

1 个答案:

答案 0 :(得分:6)

我建议使用^[0-9]+(?:\\.[0-9]{2})?$正则表达式(在Objective C中,我们需要转义正则表达式反斜杠)。

  • ^ - 字符串开始
  • [0-9]+ - 任意位数
  • (?:\\.[0-9]{2})? - 可选组:
    • \\. - 字面点
    • [0-9]{2} - 正好两位数
  • $ - String end

以下是您可以使用的示例代码(在这种情况下会报告匹配):

NSString *pattern = @"^[0-9]+(?:\\.[0-9]{2})?$";
NSString *string = @"12345.20";
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:&error];

NSRange textRange = NSMakeRange(0, string.length);
NSRange matchRange = [regex rangeOfFirstMatchInString:string options:NSMatchingReportProgress range:textRange];

// Did we find a matching range
if (matchRange.location != NSNotFound)
    NSLog (@"YES! It is matched!");
else
    NSLog (@"NO MATCH!");