对于一个穷人在客户端实现近似校正正确的排序,我需要一个JavaScript函数来在字符串中进行有效的单个字符替换.
这就是我的意思(请注意,这适用于德语文本,其他语言的排序方式不同):
native sorting gets it wrong: a b c o u z ä ö ü collation-correct would be: a ä b c o ö u ü z
基本上,我需要将所有出现的给定字符串的"ä"替换为"a"(依此类推).这样,本机排序的结果将非常接近用户期望的结果(或数据库将返回的内容).
其他语言有这样的设施:Python提供str.translate(),在Perl中tr/…/…/,XPath有一个函数translate(),ColdFusion有ReplaceList().但是JavaScript呢?
这就是我现在所拥有的.
// s would be a rather short string (something like
// 200 characters at max, most of the time much less)
function makeSortString(s) {
var translate = {
"ä": "a", "ö": "o", "ü": …Run Code Online (Sandbox Code Playgroud) 在使用AngularJS 1.6处理JavaScript项目时,我有一个我想要过滤的字符串列表.例如,假设我的列表包含árbol,cigüeña,nido和tubo.
当用西班牙语过滤字符串时,如果我过滤了"u",我会期望出现cigüeña和tubo,这对西班牙人来说是最自然的结果.然而,在德语中并非如此 - 你和ü是不同的字母,因此德国人不希望在名单上看到cigüeña.所以我正在寻找一种方法让我的列表过滤知道用户的语言环境.
我碰巧有一个包含许多变音符号的对象,这样:
diacritics["á"] = "a";
diacritics["ü"] = "u";
// and so on...
Run Code Online (Sandbox Code Playgroud)
这就是我的过滤代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码只删除了所有变音符号,所以我想让它知道用户的语言环境.因此,我将match()函数更改为:
function match(a) {
if (diacritics[a] && a.localeCompare(diacritics[a] === 0) {
return diacritics[a];
}
return a;
} …Run Code Online (Sandbox Code Playgroud)