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

如何在jQuery Textcomplete中保留输入大小写返回匹配结果?

解决jQuery Textcomplete匹配后返回与输入大小写一致结果的问题

我懂你的需求:现有单词数组都是小写,希望输入任意大小写形式的词汇时,既能忽略大小写完成匹配,又能返回和输入大小写格式完全一致的结果。下面是修改后的完整代码和关键逻辑说明:

// 辅助函数:根据输入的大小写格式转换目标单词
function convertCase(originalWord, inputTerm) {
    // 情况1:输入全大写(比如STACKOVERFLOW、ҲАЙРАТ)
    if (inputTerm === inputTerm.toLocaleUpperCase()) {
        return originalWord.toLocaleUpperCase();
    }
    // 情况2:输入首字母大写、其余小写(比如Stackoverflow、Ҳайрат)
    const capitalizedForm = inputTerm.charAt(0).toLocaleUpperCase() + inputTerm.slice(1).toLocaleLowerCase();
    if (inputTerm === capitalizedForm) {
        return originalWord.charAt(0).toLocaleUpperCase() + originalWord.slice(1).toLocaleLowerCase();
    }
    // 情况3:输入全小写或混合大小写(默认返回原小写,若需支持混合可扩展逻辑)
    return originalWord;
}

$('.form-control').textcomplete([{
    words: ['stackoverflow', 'ҳайрат', 'english', 'маҳорат'],
    match: /(^|\S*)([^\u0000-\u007f]{2,}|\w{2,})$/, 
    search: function(term, callback) {
        const lowercasedTerm = term.toLocaleLowerCase();
        // 先忽略大小写筛选出匹配的原小写单词
        const matchedOriginalWords = $.map(this.words, function(word) {
            return word.toLocaleLowerCase().indexOf(lowercasedTerm) === 0 ? word : null;
        });
        // 将匹配到的单词转换为和输入一致的大小写格式
        const caseMatchedWords = matchedOriginalWords.map(word => convertCase(word, term));
        callback(caseMatchedWords);
    },
    index: 2,
    replace: function(word) { return word + ' '; }
}]);

关键修改点说明:

  • 移除原代码中对words数组的小写转换:避免破坏原数组的基础信息(哪怕原数组已经是小写,保留原引用也更稳妥)。
  • 新增convertCase辅助函数:精准识别输入的大小写特征,把匹配到的小写单词转换成对应格式:
    • 针对非拉丁字符(如乌兹别克语的Ҳайрат),用toLocaleUpperCase()/toLocaleLowerCase()保证多语言大小写转换的正确性。
    • 覆盖了全大写、首字母大写、全小写三种最常见的输入场景。
  • 拆分搜索逻辑:先完成忽略大小写的匹配,再统一转换结果的大小写格式,既保证了匹配的准确性,又让输出完全符合输入的格式习惯。

如果需要支持更复杂的混合大小写输入(比如StAcKoVeRfLoW),可以扩展convertCase函数的逻辑,逐个字符对应输入的大小写模式,但这种场景在自动补全中比较少见,当前逻辑已经覆盖了绝大多数实用需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:45:01