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

Swift中检测字符串连续3位重复或递增数字的正则需求

解决字符串验证的连续重复/递增数字检测问题

嘿,我来帮你搞定这个验证逻辑的补充!首先得先修正一下你原来的lengthAndElementRegEx——因为\w会包含下划线_,但你要求只允许大小写字母、数字和连字符,所以这个正则得调整一下。

接下来针对你需要的两个检测规则,我给你整理了简洁的正则表达式,同时把完整的验证函数修正好:

修正后的验证逻辑说明

  • 基础规则验证:字符串长度5-23位,仅允许大小写字母、数字、连字符
  • 违规检测:禁止出现连续3位重复数字(如111)或连续3位递增数字(如123)

对应的正则表达式

基础验证正则

^[a-zA-Z0-9-]{5,23}$
  • [a-zA-Z0-9-]:明确指定允许的字符集,排除了下划线
  • {5,23}:限制长度在5到23位之间
  • ^和$:确保整个字符串都符合规则,避免部分匹配

违规检测正则

.*((\\d)\\1{2}|(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){2}).*
  • (\\d)\\1{2}:匹配连续3位重复的数字——捕获一个数字,然后匹配两个和它相同的数字
  • (?:0(?=1)|1(?=2)|...|8(?=9)){2}:匹配连续3位递增的数字——用正向预查检查每个数字后面跟着下一个递增的数字,连续两次这样的匹配就代表三个递增数字(比如123会匹配1(?=2)和2(?=3))
  • .*:允许这些违规模式出现在字符串的任意位置

完整的验证函数

func iDValidator(_ id: String) -> Bool { 
    // 修正后的基础规则正则
    let lengthAndElementRegEx = "^[a-zA-Z0-9-]{5,23}$" 
    // 检测连续重复/递增数字的正则
    let continuousRegEx = ".*((\\d)\\1{2}|(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){2}).*" 
    
    let lengthAndElementValidate = NSPredicate(format:"SELF MATCHES %@", lengthAndElementRegEx) 
    guard lengthAndElementValidate.evaluate(with: id) else { 
        return false 
    } 
    
    let continuousValidate = NSPredicate(format:"SELF MATCHES %@", continuousRegEx) 
    // 如果匹配到违规模式,返回false
    guard !continuousValidate.evaluate(with: id) else { 
        print("包含连续重复或递增的三位数字")
        return false 
    } 
    return true 
}

这里调整了原来的guard语句逻辑——因为我们需要如果存在违规模式就验证失败,所以当continuousValidate.evaluate(with: id)为true时(也就是匹配到了违规内容),我们返回false,所以用!取反。

内容的提问来源于stack exchange,提问作者김민식

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:22:32