如何从阵列中过滤掉非日语字符?

时间:2015-03-13 03:54:24

标签: javascript json addeventlistener

我目前有http://jsfiddle.net/cuLa9mtf/8/

function wordStat(text) {
    return text.split('').filter(function(letter){
        return letter > '\u3040' && letter < '\u4DBF';
    }).reduce(function (stat, word) {
        if (!stat[word]) stat[word] = 0;
        stat[word]++;
        return stat;
    }, {});
}

var input = document.querySelector('#input');
var output = document.querySelector('#output');

input.addEventListener('keyup', function () {
    output.value = JSON.stringify(wordStat(input.value), 2, 2);
})

但它似乎不起作用取决于我从中复制日文文本的位置。如果我复制并粘贴来自Rikai的字符,它会起作用,我会在结果数组中找到结果(预期结果),但如果我从其他网站(例如Jisho dictionary复制)则不起作用(字符被过滤掉了。)

我将使用它的方式是:我将有一个文本框,用户将粘贴他们的日文文本,我将过滤掉任何不是日文字符的东西(取出[a-zA-Z所有标点字母这让我想到如何使用前端Javascript可靠地过滤出非日文字符?

(根据Rikai日文字符是unicode \ u3040 - \ u4DBF)

1 个答案:

答案 0 :(得分:3)

在查看你的代码和你的Rikai链接之后,你似乎错过了大量的角色:CJK统一的表意文字 - 普通和不常见的汉字(4e00 - 9faf)

我对你的filter做了一个非常小的修改,它似乎能够成功地从Jisho词典中获取汉字字符:

function wordStat(text) {
    return text.split('').filter(function(letter){
        return (letter > '\u3040' && letter < '\u4DBF') || (letter > '\u4e00' && letter < '\u9faf');
    }).reduce(function (stat, word) {
        if (!stat[word]) stat[word] = 0;
        stat[word]++;
        return stat;
    }, {});
}

var input = document.querySelector('#input');
var output = document.querySelector('#output');

input.addEventListener('keyup', function () {
    output.value = JSON.stringify(wordStat(input.value), 2, 2);
});