【问题标题】:Use non-english characters in List.js在 List.js 中使用非英文字符
【发布时间】:2015-04-02 16:10:52
【问题描述】:

我有一个使用 List.js 库创建的功能列表。有什么办法可以将非英语字符与常规字符匹配? 例如,列表包含以下元素:'șuncă'、'brânză'、'mărar'。 我很好奇是否有办法找到这些元素,即使我在没有非英文字符的情况下进行搜索,例如:'sunca'、'branza'、'marar'

【问题讨论】:

    标签: javascript regex special-characters listjs


    【解决方案1】:

    使用filter() API function 和辅助函数将字符串中的重音字符替换为其基本版本。

    辅助函数

    // generic accent removal from input string, add any missing characters
    var removeAccents = (function () {
        var letters1 = "äáàâăëéèêĕüúùûŭöóòôŏÄÁÀÂĂËÉÈÊĔÜÚÙÛŬÖÓÒÔŎßșȘ",
            letters2 = "aaaaaeeeeeuuuuuoooooAAAAAEEEEEUUUUUOOOOOssS",
            patternLetters = new RegExp("[" + letters1 + "]", "g"),
            lookupLetters = {}, letterTranslator;
    
        letters1.split("").forEach(function (letter, i) {
            lookupLetters[letter] = letters2[i];
        });
    
        letterTranslator = function(match) { 
            return lookupLetters[match] || match;
        };
    
        return function removeAccents(input) {
            return input.replace(patternLetters, letterTranslator);
        };
    })();
    
    // creates a specific filter function for use in List.js
    function getAccentInsensitiveFilter(property, search) {
        search = removeAccents(search).toLowerCase();
    
        return function (item) {
            var value = removeAccents(item.values()[property] || "").toLowerCase();
            return value.indexOf(search) > -1;
        };
    }
    

    然后

    // filter for "sunca" in the "featureName" property
    yourList.filter(getAccentInsensitiveFilter("featureName", "șuncă"));
    
    // remove filter 
    yourList.filter();
    

    【讨论】:

    • 很抱歉,我以前从未使用过正则表达式,而且我也是 List.js 的新手。鉴于此 plunker 的代码:plnkr.co/edit/FEs04jxVNdTjiIerYUX4,您能告诉我如何实现该过滤器吗?该列表是在 script.js 的第 51 行创建的,我正在搜索 meniu.geojson 属性
    • 呃,不,我不会为你调试/编写你的应用程序。我建议您仔细阅读 API 文档,从文档中的示例到小型、自包含的测试用例,再到更大的 Web 应用程序,逐步进行。首先了解 List.js API 的工作原理。自己编写一个更简单的过滤器函数并将其应用于您的列表。了解getAccentInsensitiveFilter()。你现在不必完全理解removeAccents(),只需测试它的反应。很抱歉,但恐怕你必须自己解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 2011-06-04
    相关资源
    最近更新 更多