2013-08-31 115 views
0

好了,这是我有什么(特殊THX至图沙·古普塔,用于固定码)俄罗斯输入字数

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

你检查了你的js脚本运行的文件的编码吗?从[这](http://stackoverflow.com/questions/553463/jquery-ajax-character-encoding-problem)页面:“UTF-8应该处理所有口音和外国字符”...也看一看在[这](http://stackoverflow.com/questions/10396913/how-to-show-russian-text-in-jquery-dialog-title) - 希望这会有所帮助 – lollo

+0

链接没有帮助,并且我尝试过一般编码,UTF-8之间我也尝试西里尔的细节,如windows1251 – Konata

+0

哪个系统正在为您的项目运行?尝试把这个元标记放在你的html文件的头部分: lollo

回答

0

T他的问题在你的正则表达式中 - \b与UTF-8字边界不符。

尝试修改此:

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

要这样:

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

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

+1

这段代码在大多数情况下工作,报告例如“Да - илинет?”为4个单词。 –

+0

@ JukkaK.Korpela +1,因为是的,这是一个非常基本的例子,需要根据具体任务进行一些改进。值得注意的是'\ b'也会将数字计算为'文字' - 并不总是有用的,例如。在计算翻译文本。在我的正则表达式中加入'\ -'会覆盖你的例子,但总的来说,编写一个查找正匹配的表达式会更好。如果任务只需要Cryillic字数统计,那么可以使用'[а-яА-Я0-9]',但它不会与其他UTF-8字母匹配。 – bobs12

+1

我的答案是试图寻找积极的匹配。请注意,'[а-яА-Я0-9]'不会匹配字母Ё和ё。 –

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; 

你或许应当把一个连字符作为对应于一个字母(和因此加\-括号内),从而使连字符的化合物将被计数为一个字,但这是有争议的(例如“жили-были”两个单词或一个?)