2009-09-24 5 views
5

J'ai fait un peu de recherche à ce sujet. Trouvé beaucoup de scripts qui dénombrés personnages et même des mots comptés mais ne pouvait pas trouver un qui supprime les mots qui vont sur la limite de mots ....Limite de mots dans une zone de texte

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 je copiais à partir d'un script de nombre de caractères mais évidemment cela ne marchera pas parce que je compte les mots

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

Comment puis-je faire le script supprimer des mots supplémentaires ajoutés sur la limite? J'ai besoin de ceci surtout s'ils collent dans une description ... Il faut compter les mots et ensuite supprimer tous les mots au-delà de la limite.

Appréciez votre aide!

+0

** Définir mot **, s'il vous plaît. Sont ces mots - "autonome", "43e", "café", "курица"? – kangax

Répondre

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

mise à jour
J'ai remarqué que cela compte aussi n espaces dans une ligne que n-1 mots, qui est fixé par cette:

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

// test

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

// field.value = motlimit (valeur.zone, 8);

0

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

qui garderait intact votre espace.

3

J'utiliserions 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 permettra de préserver les espaces au begin et entre les mots.

0

Cette fonction limitera, et laisser 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 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 simplement le plugin Countable
Fournit un caractère ou un mot contre (et limiteur) pour toute saisie de texte ou zone de texte. Fonctionne lorsque vous tapez ou collez du 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 licence sous les licences MIT http://www.opensource.org/licenses/mit-license.php
et GPL http://www.opensource.org/licenses/gpl-license.php.

2

ce puits aide

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

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

Cette réponse a été marquée pour le contrôle de qualité en raison de sa longueur. SO préfère les réponses avec un texte expliquant comment ce code résout le problème du PO. S'il vous plaît lire [réponse]. Merci. –

+0

mieux maintenant @EngineerDollery? –

+0

Personnellement, je pense que la solution était assez simple pour qu'elle n'ait pas besoin de beaucoup de verbiage. Mais, il a été marqué, et malheureusement, il sera repéré à nouveau. Je pense que le système de repérage se penche sur l'équilibre du texte à coder, et vous avez rendu le code encore plus long pour que votre solde soit encore plus faussé. –

Questions connexes