2009-09-24 90 views
5

我已经对此进行了一些搜索。发现很多是计算字符,甚至计算的话,但无法找到一个删除了过去一字涨停任何文字脚本....textarea中的字数限制

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

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); 

如何使脚本删除添加超过限制任何多余的话?我需要这个,特别是如果他们粘贴在一个描述中......它需要计算单词,然后删除超过限制的任何单词。

感谢您的帮助!

+0

**定义字**,请。这些词是 - “独立的”,“第43”,“咖啡馆”,“курица”? – kangax 2009-09-24 03:11:56

回答

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(' '); 
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);

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); 

这将让您的空白完好无损。

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; 
} 

这样会保留在开始之间的字的空白。

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> 
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> 
4

jQuery的简单可列插件
提供的字符或字计数器(和限制器)用于任何文本输入或文本区域。在键入或粘贴文本时使用。

@version 0.4。2
@homepage http://github.com/aaronrussell/jquery-simply-countable/
@author亚伦·罗素http://www.aaronrussell.co.uk

版权所有(C)2009-2010亚伦·罗素
双麻省理工学院http://www.opensource.org/licenses/mit-license.php
和GPL许可证http://www.opensource.org/licenses/gpl-license.php下许可。

2

这也帮助

function limit_words($post_content, $word_limit=30) 
{ 
$words = explode(" ",$post_content); 
return implode(" ",array_splice($words,0,$word_limit)); 
} 
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) 
} 
+0

由于长度的限制,此答案已被标记为质量审核。 SO喜欢用一些文本解释这个代码如何解决OP的问题。请阅读[回答]。谢谢。 – 2014-10-09 15:35:37

+0

现在好了@EngineerDollery? – 2014-10-09 17:39:31

+0

就我个人而言,我认为解决方案非常简单,不需要太多的verbage。但是,它被标记,不幸的是它会再次被标记。我认为标记系统会考虑文本与代码的平衡,并且使代码更长,以便您的平衡更加倾斜。 – 2014-10-09 18:14:57