正则表达式拒绝数字序列

Regex to reject sequence of Digits

我需要验证 phone 号码。下面是代码片段

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

      NSString *regExPattern = @"^[6-9]\d{9}$"; ORIGINAL
//    NSString *regExPattern = @"^[6-9](\d)(?!+$)\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;
}

我想拒绝序列示例中的 phone 号码 9999999999, 6666677777

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

使用

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

regex demo

详情

  • ^ - 字符串开头
  • [6-9] - 从 69
  • 的数字
  • (?!\d*(\d){4}) - 如果在当前位置的右侧紧邻有
    • \d* - 0+ 位
    • (\d) - 捕获到第 1 组的数字
    • {4} - 在第 1 组中捕获的相同数字重复四次
  • \d{9} - 任意 9 位数字
  • $ - 字符串结尾(替换为 \z 以匹配字符串的结尾,不允许在字符串中最后一个 LF 符号之前进行匹配)。

请注意,\d 在 ICU 正则表达式库中支持 Unicode,因此使用 [0-9] 而不是 \d 可能更安全。