如何从数组中过滤掉非日语字符

How can I filter out non-Japanese characters from my array?

本文关键字:日语 字符 过滤 数组      更新时间:2023-09-26

我目前有这个 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 字典)复制它不起作用(字符被过滤掉)。

我将

使用它的方式是:我将有一个文本框,用户将在其中粘贴他们的日语文本,我将过滤掉任何不是日语字符的内容(取出 [a-zA-Z 其他语言的所有标点符号字母]。这让我想到了一个问题,即如何使用前端Javascript可靠地过滤掉非日语字符?

(根据Rikai日语字符是Unicode ''u3040 - ''u4DBF)

在查看了您的代码和 Rikai 链接后,您似乎错过了大量字符: 中日韩统一表意文字 - 常见和不常见的汉字 ( 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);
});