Swift/iOS正则验证密码报U_REGEX_MISSING_CLOSE_BRACKET错误排查
报错及逻辑问题的原因
- 直接触发报错的是语法错误:你在特殊字符的方括号匹配组里直接写了未转义的
[字符。正则的字符组([]包裹的部分)中[属于保留字符,必须转义才能作为普通符号匹配,你的写法导致正则解析时误认为字符组提前关闭,因此抛出U_REGEX_MISSING_CLOSE_BRACKET缺失闭合括号的错误。 - 正则逻辑完全不符合你的需求:你要求仅必填1个大写字母、1个数字,但当前正则额外加了「必须包含小写字母」「必须包含指定特殊符号」的强制校验,且所有预查规则写完后没有加匹配实际字符的表达式,就算语法修正也无法匹配任何有效密码。
符合你需求的修正代码
如果仅要求至少1个大写、1个数字,其余字符无限制,可自行调整{6,}中的数字修改最小密码长度(示例为最少6位):
let passwordRegex = "^(?=.*[0-9])(?=.*[A-Z]).{6,}$"
如果你额外需要限制密码只能由大小写字母、数字、你指定的特殊符号组成,写法如下(已处理转义问题):
// 字符组内的[、]、-都已做Swift字符串的双重转义,避免解析错误 let passwordRegex = "^(?=.*[0-9])(?=.*[A-Z])[a-zA-Z0-9*.!@$%^&(){}:;<>,.?/~_+\\-=|\\[\\]]{6,}$"
内容的提问来源于stack exchange,提问作者Thorvald
相关产品推荐
相关产品推荐

