正则表达式拒绝数字序列

时间:2018-04-09 09:27:43

标签: objective-c regex nsregularexpression

我需要验证电话号码。以下是代码段

-(BOOL) validatePhone:(NSString*) phoneString
{

      NSString *regExPattern = @"^[6-9]\\d{9}$"; ORIGINAL
//    NSString *regExPattern = @"^[6-9](\\d)(?!\1+$)\\d*$";
      NSRegularExpression *regEx = [[NSRegularExpression alloc] initWithPattern:regExPattern options:NSRegularExpressionCaseInsensitive error:nil];
      NSUInteger regExMatches = [regEx numberOfMatchesInString:phoneString options:0 range:NSMakeRange(0, [phoneString length])];
      NSLog(@"%lu", (unsigned long)regExMatches);
     if (regExMatches == 0) {
        return NO;
     }
     else
        return YES;
}

我想拒绝sequnce示例中的电话号码 9999999999,6666677777

1 个答案:

答案 0 :(得分:3)

似乎你想要禁止5个或更多相同的连续数字。

使用

@"^[6-9](?!\\d*(\\d)\\1{4})\\d{9}$"

请参阅regex demo

<强>详情

  • ^ - 字符串开头
  • [6-9] - 从69
  • 的数字
  • (?!\d*(\d)\1{4}) - 如果在当前位置的右边,有一个未通过匹配的否定前瞻
    • \d* - 0+位数
    • (\d) - 捕获到第1组的数字
    • \1{4} - 重复四次的第1组中捕获的相同数字
  • \d{9} - 任意9位
  • $ - 字符串结尾(替换为\z以匹配字符串的最后一部分,在字符串中的最终LF符号之前禁止匹配)。

请注意,\d在ICU正则表达式库中具有Unicode识别功能,因此使用[0-9]代替\d可能更安全。