好的,所以这就是我所拥有的(特别是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');
});
});
我希望它能够计算俄语单词,例如“Приветкакдела”,到目前为止它只适用于英语输入
答案 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来得到字数。