You need to enable JavaScript to run this app. 如何修复Swift中使用正则表达式校验密码导致的崩溃问题
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Swift中使用正则表达式校验密码导致的崩溃问题

错误根源

你遇到的报错由两类问题共同导致:

  1. 正则表达式本身存在语法错误
  2. Swift字符串转义规则处理不当

具体问题说明

  • 正则未闭合正向断言的右括号,且特殊字符集中的[、]、-、\未转义,导致正则引擎识别到未闭合的字符集,抛出U_REGEX_MISSING_CLOSE_BRACKET异常
  • 你把总长度限制错误写在了特殊字符集后面,相当于要求特殊字符长度为8-32位,不符合需求
  • Swift字符串中\为转义符,要在正则中表示一个字面量\,普通字符串需要双重转义

修复方案

修正后的正则逻辑

四个正向断言分别校验必须包含的字符类型,末尾匹配整个字符串长度8-32位:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[*.!@#$%^&(){}[\]:;<>,.?/~_+\-|\\]).{8,32}$

修正后的Swift代码

普通字符串写法:

var isPasswordValid: Bool {
    let passwordRegEx = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[*.!@#$%^&(){}[\\]:;<>,.?/~_+=\\-|\\\\]).{8,32}$"
    return NSPredicate(format: "SELF MATCHES %@", passwordRegEx).evaluate(with: self)
}

如果使用Swift 5+的Raw字符串(推荐,无需额外处理\转义):

var isPasswordValid: Bool {
    let passwordRegEx = #"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[*.!@#$%^&(){}[\]:;<>,.?/~_+\-|\\]).{8,32}$"#
    return NSPredicate(format: "SELF MATCHES %@", passwordRegEx).evaluate(with: self)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 11:27:02