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

Swift如何实现不区分变音符号的字符串contains()匹配?

解决Swift中越南语无变音符号搜索问题

你遇到的stringByFoldingWithOptions错误,是因为这是Objective-C里NSString的方法,Swift的String对应的API是folding(options:locale:)。下面是实现无变音符号匹配的具体方案:

步骤1:实现去除变音符号的辅助函数

先写一个工具函数,统一处理字符串的变音符号和大小写:

func normalizeString(_ str: String) -> String {
    // 转小写后去除变音符号,指定越南语Locale保证处理准确
    return str.lowercased().folding(options: .diacriticInsensitive, locale: Locale(identifier: "vi_VN"))
}

步骤2:修改过滤逻辑

把原来的过滤代码替换成以下逻辑,对用户输入和数组元素都做归一化处理后再判断包含关系:

let userInput = searchViewModel.text
let normalizedInput = normalizeString(userInput)
                
if !normalizedInput.isEmpty {
    filteredDictionary = dictionaryStrings.filter { phrase in
        let normalizedPhrase = normalizeString(phrase)
        return normalizedPhrase.contains(normalizedInput)
    }
}

说明

  • 用.diacriticInsensitive选项可以去除所有变音符号(包括越南语的重音、声调符号),比如把"chân"转成"chan"。
  • 指定vi_VN的Locale是为了更精准处理越南语的特殊字符,避免其他语言规则干扰。
  • 统一对输入和数组元素做归一化,不管用户输入带不带变音符号,都能匹配到对应的短语。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 09:48:17