You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

手机号验证正则表达式:实现拒绝连续重复数字的校验

实现带连续重复数字检测的手机号验证

没问题,我来帮你搞定这个带连续重复数字检测的手机号验证功能~

需求拆解

你原来的正则^[6-9]\\d{9}$只能验证10位印度手机号的基础格式(开头是6-9,后面跟着9位数字),但没法过滤掉全相同数字的无效号码(比如6666666666、9111111111这类明显不符合常理的号码)。我们需要修改正则,加上对连续重复数字序列的检测逻辑。

调整后的正则及解释

这里分两种场景给你方案,你可以按需选择:

场景1:拒绝全相同数字的手机号

用你注释里的思路优化后的正则,确保严格匹配10位长度:

NSString *regExPattern = @"^[6-9](\\d)(?!\\1{8}$)\\d{8}$";

正则逻辑说明:

  • ^[6-9]:锁定手机号开头必须是6-9的数字
  • (\\d):捕获第二位数字,用来做后续重复检测
  • (?!\\1{8}$):负向前瞻断言——确保后面的8位数字不全是和捕获到的第二位数字一样的(这样整个10位号码就不会出现全相同的情况)
  • \\d{8}:匹配剩下的8位数字,保证总长度刚好10位

场景2:拒绝任意位置出现连续3个及以上相同数字的手机号

如果需要更严格的校验(比如6222345678这种带连续3个2的号码也想拒绝),可以用这个正则:

NSString *regExPattern = @"^(?!.*(\\d)\\1\\1)[6-9]\\d{9}$";

正则逻辑说明:

  • ^(?!.*(\\d)\\1\\1):负向前瞻断言——先检查整个字符串里有没有连续3个相同的数字,如果有直接判定无效
  • [6-9]\\d{9}$:再验证基础的10位手机号格式

完整代码示例

把你的代码替换成下面的版本,这里以场景1的全相同数字检测为例:

-(BOOL) validatePhone:(NSString*) phoneString {
    // 拒绝全相同数字的10位印度手机号正则
    NSString *regExPattern = @"^[6-9](\\d)(?!\\1{8}$)\\d{8}$";
    // 如果需要禁止连续3个及以上相同数字,替换成下面这行:
    // NSString *regExPattern = @"^(?!.*(\\d)\\1\\1)[6-9]\\d{9}$";
    
    NSRegularExpression *regEx = [[NSRegularExpression alloc] initWithPattern:regExPattern 
                                                                       options:NSRegularExpressionCaseInsensitive 
                                                                         error:nil];
    NSUInteger regExMatches = [regEx numberOfMatchesInString:phoneString 
                                                      options:0 
                                                        range:NSMakeRange(0, [phoneString length])];
    // 匹配成功(次数为1)则返回YES,否则NO
    return regExMatches == 1;
}

测试效果

  • ✅ 有效号码:6123456789、9876543210
  • ❌ 无效号码(场景1):6666666666、9111111111
  • ❌ 无效号码(场景2):6222345678、6111234567

内容的提问来源于stack exchange,提问作者LeXeR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:18:51