限制textarea中的单词

时间:2009-09-24 00:52:07

标签: javascript

我已经对此进行了一些搜索。发现大量的脚本可以统计字符,甚至可以计算单词,但是找不到可以删除超过单词限制的单词的脚本....

到目前为止,这是我的脚本......:

var maxWords = 10;
function countWordsLeft(field) {    
    totalWords = field.value.split(' ');    
    if (totalWords.length > maxWords)
        field.value = field.value.substring(0, maxWords);
    else
        document.getElementById('description_count').innerHTML = maxWords - totalWords.length;
}

我从字符计数脚本中复制了以下行,但显然这不会起作用,因为我在计算单词

if (totalWords.length > maxWords)
   field.value = field.value.substring(0, maxWords);

如何让脚本删除超出限制的任何额外单词?我需要这个特别是如果他们粘贴在描述中...它需要计算单词然后删除超过限制的任何单词。

感谢您的帮助!

9 个答案:

答案 0 :(得分:4)

field.value = field.value.split(' ').splice(0, maxWords).join(' ');

<强>更新
我注意到这也将n个空格连续计为n-1个单词,由此修复:

var a = field.value.split(' ');
var words=0, i=0;
for(; (i<a.length) && (words<maxWords); ++i)
  if(a[i].length) ++words;
field.value = a.splice(0,i).join(' ');

答案 1 :(得分:4)

jQuery Simply Countable插件
为任何文本输入或文本区域提供字符或单词计数器(和限制器)。键入或粘贴文本时工作。

@version 0.4.2
@homepage http://github.com/aaronrussell/jquery-simply-countable/
@author Aaron Russell http://www.aaronrussell.co.uk

版权所有(c)2009-2010 Aaron Russell
在麻省理工学院http://www.opensource.org/licenses/mit-license.php下获得双重许可 和GPL http://www.opensource.org/licenses/gpl-license.php许可证。

答案 2 :(得分:3)

我可能会用这个:

var maxWords = 10;
function limitLengthInWords(field) {
    var value = field.value,
        wordCount = value.split(/\S+/).length - 1,
        re = new RegExp("^\\s*\\S+(?:\\s+\\S+){0,"+(maxWords-1)+"}");
    if (wordCount >= maxWords) {
        field.value = value.match(re);
    }
    document.getElementById('description_count').innerHTML = maxWords - wordCount;
}

这将保留开头和单词之间的空白。

答案 3 :(得分:2)

这很好帮助

function limit_words($post_content, $word_limit=30)
{
$words = explode(" ",$post_content);
return implode(" ",array_splice($words,0,$word_limit));
}

答案 4 :(得分:1)

<script language="javascript" type="text/javascript">
function limitText(limitField, limitCount, limitNum) {
    if (limitField.value.length > limitNum) {
        limitField.value = limitField.value.substring(0, limitNum);
    } else {
        limitCount.value = limitNum - limitField.value.length;
    }
}
</script>

答案 5 :(得分:0)

function wordlimit(s, n){
 var rx= RegExp('([a-zA-Z]+\\S+\\s+){'+n+'}','g'); 
 while(rx.test(s)){
  return s.substring(0, rx.lastIndex);
 }
 return s;
}

<强> //测试

s= 'the quick red fox jumps over the lazy brown dog\'s back';
alert(wordlimit(s, 8)); 

// field.value = wordlimit(field.value,8);

答案 6 :(得分:0)

或者你可以这样做:

function truncateStringToMaxWords(string, maxWords)
{
  var whitespace = string.match(/\s+/g);
  var words = string.split(/\s+/);

  var finished = [];
  for(var i = 0; i < maxWords && words.length > 0; i++)
  {
    if (words[0] == "") { i--; }
    finished.push(words.shift());
    finished.push(whitespace.shift());
  }
  return finished.join('');  
}
field.value = truncateStringToMaxWords(field.value, 5);

哪会保持你的空白不变。

答案 7 :(得分:0)

此功能将限制,不再允许使用单词:

function limitWords(id) {
    var maxWords=5;
    var d=document.getElementById(id);
    if ( d.value.split(' ').length > maxWords ) {
        t=d.value.substring(0,d.value.lastIndexOf(' '));
        d.value=t.substring(0,t.lastIndexOf(' ')+1);
    }
}

示例HTML

<textarea id='txt' rows="2" onkeyup="limitWords(this.id)"></textarea>

答案 8 :(得分:0)

我这样做了

function limitWord(myString, limit){
 return myString
  .replace(/\s+/g, ' ') // remove extra spaces between words
  .split(' ')           // split string into array (using spaces as seperator)
  .splice(0, limit)     // splice the array to the desired word limit
  .join(' ');           // join it back into string (using spaces as seperator)
}