2009-11-17 84 views
0

我最近使用修改JavaScript中的字数统计方法为我的网站,使其在计算文本域的INTIAL量的话,但它并不完全工作字计数方法

function wordCounter(field,countfield) 
{ 
    var maxlimit = 200; 
    var wordcounter = maxlimit - information.value.split(' ').length; 
    for (x = 0; x < field.value.length; x++) 
    { 
     if(field.value.charAt(x) == " " && field.value.charAt(x-1) != " ") // Counts the spaces while ignoring double spaces, usually one in between each word. 
     { 
      wordcounter++ 
     } 

     if (wordcounter > 250) 
     { 
      field.value = field.value.substring(0, x); 
     } 
     else 
     { 
      countfield.value = maxlimit - wordcounter; 
     } 
    } 
} 

回答

5

鉴于字符串 “s”,你这样做:

​​

这将在所有空格(空格,换行符等)处拆分字符串,还可以处理多个空格等。编辑:添加内联修剪以从开始/结尾去除空白。

+0

由于某些奇怪的原因,无论我使用什么解决方案,它都会在计数中添加两个而不是一个 – 2009-11-17 19:51:42

+0

微小问题:如果输入用空白字符左填充,这会夸大字数。 – richardtallent 2009-11-17 21:27:06

+0

richardtallent - 感谢您的评论,正确的,添加内联修剪来解决。 – Jaanus 2009-11-18 16:41:15

1

的简单方法将计算的空格数并加1

编辑:添加例子

这基本上做到这一点。按空格分割

var str = 'adfs asdf a asdf'; 
alert(str.split(/\s+/).length); 
+0

好吧,并为最终结果添加1。 ;-) – 2009-11-17 19:12:29

+0

这是一个+1,+1的那个。 – 2009-11-17 19:13:06

+1

你甚至可以改进这一点,以避免多个空格被视为更多的单词。这将是一个简单的问题,可以通过搜索字符串并用'_'替换'__'的任何实例(当然,可以用空格替代下划线)。当处理多个空间的所有实例时,请计算空格。当然,这并不完美,但自动化的字数通常只是一个体面的近似值。 – 2009-11-17 19:15:46

3

最简单的解决方法是计算非连续空格个字符(空格,制表符等)的数量加1。

正则表达式:

\S\s 

的JavaScript:

var str = "The fox jumped over the lazy dog."; 
var wordcount = str.match(/\S\s/g).length + 1; 

请注意,我没有使用 “\ S +”,因为我不需要比赛所有空白,只有空白在非空白字符后面出现的字符。这有两个优点:

  1. 当字符串有许多重复的空白字符时,开销略小。
  2. 如果输入以空格开始,则不会在计数中返回额外的单词。

许多答案在这里使用split()代替。 split()的唯一优点是不必将1添加到答案中,但是恕我直言,match()是更好的答案,因为代码更具可读性。代码的目的是查找单词边界,而不是分割单词。

此外,尽管比赛()和分裂()的返回数组,匹配()具有更小的内存开销,原因有二:

  • 少一个元素(没什么大不了)仅
  • 它返回每个数组元素的两个字符(可能是显著)
+1

我更喜欢split()版本,因为它在语义上更加令人愉快,它确实计算了单词,并且您不必理解为什么最终会有+1。此外,如果字符串用空格填充,则此代码会给出错误的结果。 – Jaanus 2009-11-18 16:44:33

0

x =“a b f d”; alert('x has'+ x.split(/ \ s + /)。长度+“字”)

0

我不知道如果我明白究竟你需要(您粘贴代码混淆了我一个位),但这里的词数的简单功能:

var text = "1 2 3 4000"; 

function wordCounter(text) { 
    word_count = text.split(" "); 

    return word_count.length; 
} 

wordCounter(text); // returns 4 as expected 
+0

这不会在选项卡,CR,LF等上分割,但如果OP正在处理多行文本。如果在单词或句子之间使用了多个空格,则这也将给出错误的答案(完全停顿后的两个空格是一些人的常见不幸惯例)。 – richardtallent 2009-11-17 19:24:40

+0

啊,是的,jeez,我的错。无论如何,RegEx版本更简单,更清洁。 – 2009-11-17 20:33:50