当我在使用AngularJS 1.6进行JavaScript项目开发时,我有一个字符串列表需要过滤。例如,假设我的列表包含árbol,cigüeña,nido和tubo。
在对西班牙语字符串进行过滤时,如果我筛选“u”,我希望cigüeña和tubo都会出现,这对于西班牙人来说是最自然的结果。但是,在德语中不是这种情况-u和ü是不同的字母,因此德国人不想在列表中看到cigüeña。因此,我正在寻找一种使我的列表过滤意识到用户所在地区的方法。
我碰巧有一个包含许多变音符的对象,例如:
很遗憾,这并不起作用。localeCompare函数在使用德语和西班牙语区域设置比较"u"和"ü"时返回相同的值,所以这不是答案。我已经查看了localeCompare方法的参考并尝试了使用和敏感度选项,但它们似乎在这里没有什么帮助。
我该如何调整我的代码使其起作用?是否有任何库可以正确处理这个问题?
在对西班牙语字符串进行过滤时,如果我筛选“u”,我希望cigüeña和tubo都会出现,这对于西班牙人来说是最自然的结果。但是,在德语中不是这种情况-u和ü是不同的字母,因此德国人不想在列表中看到cigüeña。因此,我正在寻找一种使我的列表过滤意识到用户所在地区的方法。
我碰巧有一个包含许多变音符的对象,例如:
diacritics["á"] = "a";
diacritics["ü"] = "u";
// and so on...
这是我的筛选代码:
function matches(word, search) {
var cleanWord = removeDiacritics(word.toLowerCase());
var cleanSearch = removeDiacritics(search.toLowerCase());
return cleanWord.indexOf(cleanSearch) > -1;
}
function removeDiacritics(word) {
function match(a) {
return diacritics[a] || a;
}
return text.replace(/[^\u0000-\u007E]/g, match);
}
上面的代码只是移除了所有的变音符号,因此我想让它能够识别用户的语言环境。因此,我将match()函数更改为以下内容:
function match(a) {
if (diacritics[a] && a.localeCompare(diacritics[a] === 0) {
return diacritics[a];
}
return a;
}
很遗憾,这并不起作用。localeCompare函数在使用德语和西班牙语区域设置比较"u"和"ü"时返回相同的值,所以这不是答案。我已经查看了localeCompare方法的参考并尝试了使用和敏感度选项,但它们似乎在这里没有什么帮助。
我该如何调整我的代码使其起作用?是否有任何库可以正确处理这个问题?