俄语输入字数

时间:2013-08-31 17:45:06

标签: jquery html encoding input character-encoding

好的,所以这就是我所拥有的(特别是Tushar Gupta,以修复代码)

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');
});
});

我希望它能够计算俄语单词,例如“Приветкакдела”,到目前为止它只适用于英语输入

2 个答案:

答案 0 :(得分: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;

您应该将连字符视为对应于一个字母(因此在括号内添加\-),以便将带连字符的化合物计为一个单词,但这是有争议的(例如“жили- были“两个字还是一个?”

答案 1 :(得分:0)

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

尝试更改此内容:

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

对此:

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

并查看是否为西里尔文输入提供了结果。如果它有效,那么你不再需要除以2来得到字数。