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

如何修改密码验证正则以排除德语变音符号?

问题原因
  • 原正则中的[a-zA-Z]在NSPredicate的正则引擎中是Unicode感知的,会匹配所有Unicode分类里的字母字符,包括德语变音符号(ü、ä、Ä)和ß(ß会被识别为小写字母类),导致含这些字符的密码也能通过验证。
  • 原正则里的(?=.*[a-zA-Z])属于冗余断言,(?=.*[a-z])和(?=.*[A-Z])已经覆盖了大小写字母的校验要求。
解决方法

修改正则表达式,明确限定只允许ASCII范围内的大小写字母和数字,同时移除冗余断言:

func matchPasswordWith(_ text: String) -> Bool {
    let predicate = NSPredicate(format: "SELF MATCHES %@","^(?=.*?[0-9])(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{10,}$")
    return predicate.evaluate(with: text)
}

关键调整说明

  • 将原正则末尾的.{10,}替换为[a-zA-Z0-9]{10,}:.会匹配任意字符(包括变音符号),替换后仅允许ASCII大小写字母和数字,直接排除了德语变音符号的合法地位。
  • 删除冗余的(?=.*[a-zA-Z])断言,避免重复校验。
验证效果
  • 合法密码示例:HelloWorld123 → 返回true
  • 含变音符号的密码:ÄlloWorld123 → 返回false
  • 含ß的密码:abcß1234567 → 返回false

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:40:22