相关疑难解决方法(0)

有效地替换字符串中的所有重音字符?

对于一个穷人在客户端实现近似校正正确的排序,我需要一个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)

javascript sorting string collation

108
推荐指数
12
解决办法
11万
查看次数

根据用户区域设置过滤字符串列表

在使用AngularJS 1.6处理JavaScript项目时,我有一个我想要过滤的字符串列表.例如,假设我的列表包含árbol,cigüeña,nidotubo.

当用西班牙语过滤字符串时,如果我过滤了"u",我会期望出现cigüeñatubo,这对西班牙人来说是最自然的结果.然而,在德语中并非如此 - 你和ü是不同的字母,因此德国人不希望在名单上看到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)

javascript internationalization angularjs

11
推荐指数
1
解决办法
785
查看次数