Limiter les mots dans une zone de texte

J'ai fait un peu de recherche à ce sujet. Trouvé beaucoup de scripts qui comptaient des personnages et même des mots comptés, mais qui ne pouvaient pas trouver celui qui supprime les mots qui dépassent la limite de mots …

Voici mon script jusqu'à présent …:

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

J'ai la ligne suivante que j'ai copiée à partir d'un script de comptabilité de personnage mais évidemment ça ne fonctionnera pas parce que je compte des mots

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

Comment faire pour que le script supprime les mots supplémentaires ajoutés sur la limite? J'ai besoin de cela surtout si ils coller dans une description … Il faut compter les mots, puis supprimer tous les mots sur la limite.

Apprécier ton aide!

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

mettre à jour
J'ai remarqué que cela compte aussi n espaces dans une rangée que n-1 mots, qui est fixé par ceci:

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

Plugin jQuery Simply Countable
Fournit un compteur de caractères ou de mots (et un limiteur) pour toute entrée de texte ou texte. Fonctionne lors de la saisie ou du collage de texte.

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

Copyright (c) 2009-2010 Aaron Russell
Double autorisé sous le MIT http://www.opensource.org/licenses/mit-license.php
Et les licences GPL http://www.opensource.org/licenses/gpl-license.php .

J'utiliserais probablement ceci:

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

Cela préservera les espaces au début et entre les mots.

Cela aide bien

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

//tester

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

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

Ou vous pourriez faire quelque chose comme:

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

Ce qui tiendrait votre espace blanc intact.

Cette fonction limite et ne permet plus de mots:

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

Exemple de HTML

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

Je l'ai fait comme ça

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