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

Jor*_*n H 1 regex objective-c nsregularexpression

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

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

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

@"^[0-9]+(\\.[0-9][0-9])?$"
Run Code Online (Sandbox Code Playgroud)

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

Wik*_*żew 6

我建议使用^[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!");
Run Code Online (Sandbox Code Playgroud)