0

Ok, so this is what I have (special thx to Tushar Gupta, for fixing the code)

HTML

<input type='checkbox' value='2' name='v'>STS
<input type='checkbox' value='4' name='v'>NTV

js

$(function () {
var wordCounts = {};
$("input[type='text']:not(:disabled)").keyup(function () {
    var matches = this.value.match(/\b/g);
    wordCounts[this.id] = matches ? matches.length / 2 : 0;
    var finalCount = 0;
    var x = 0;
    $('input:checkbox:checked').each(function () {
        x += parseInt(this.value);
    });
    x = (x == 0) ? 1 : x;
    $.each(wordCounts, function (k, v) {
        finalCount += v * x;
    });
    $('#finalcount').val(finalCount)
}).keyup();
$('input:checkbox').change(function () {
    $('input[type="text"]:not(:disabled)').trigger('keyup');
});
});

I want it to be able to count up Russian words e.g "Привет как дела", so far it only works with English input

4

2 回答 2

1

\b符号是根据“单词边界”定义的,但“单词”表示一系列 ASCII 字母,因此不能用于俄语文本。一种简单的方法是计算西里尔字母的序列,从 U+0400 到 U+0481 的范围涵盖了俄语中使用的西里尔字母。

var matches = this.value.match(/\b/g);
wordCounts[this.id] = matches ? matches.length / 2 : 0;

由线

var matches = this.value.match(/[\u0400-\u0481]+/g);
wordCounts[this.id] = matches ? matches.length : 0;

您也许应该将连字符视为对应于一个字母(因此\-在括号内添加),以便将连字符的复合词视为一个单词,但这值得商榷(例如“жили-были”是两个词还是一个词?)

于 2013-08-31T21:13:30.660 回答
0

问题出在您的正则表达式中 -\b与 UTF-8 字边界不匹配。

尝试改变这个:

    var matches = this.value.match(/\b/g);

对此:

    var matches = this.value.match(/[^\s\.\!\?]+/g);

看看这是否给出了西里尔文输入的结果。如果它有效,那么您不再需要除以 2 来获得字数。

于 2013-08-31T20:07:31.060 回答