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

Regex for numbers with optional decimal value, fixed to two positions?

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

  1. 任意数量的整数后跟:
  2. 可选组:
  3. 小数后跟两位数(如果提供小数则需要)

这允许任意数量的数字,我认为它的格式正确,允许由一个句点后跟两位数字组成的可选组,但由于某种原因,这不允许小数。也许小数点没有正确转义?

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

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

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

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

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

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!");