2009-11-17 16 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