2009-09-24 19 views
5

Ich habe ein wenig suchen auf diesem. Gefunden viele Skripte, die Zeichen gezählt und sogar Wörter gezählt, konnte aber nicht ein, dass alle Wörter entfernt, die über das Wort Limit gehen ....Begrenzen Sie Wörter in einem Textfeld

Hier ist mein Skript so weit ...:

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

ich habe die folgende Zeile bekommt, die ich von einer Zeichenzählung Skript kopiert, aber offensichtlich diese nicht funktionieren, weil ich Worte verlasse mich

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

Wie mache ich das Skript keine zusätzlichen Worte über die Grenze hinzugefügt löschen? Ich brauche das besonders, wenn sie eine Beschreibung einfügen ... Es muss die Wörter zählen und dann alle Wörter über das Limit löschen.

Schätzen Sie Ihre Hilfe!

+0

** Wort definieren **, bitte. Sind diese Wörter - "in sich geschlossen", "43.", "Café", "курица"? – kangax

Antwort

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

Update
bemerkte ich, dass dies auch n Räume in einer Reihe, wie n-1 Worte zählt, die durch diese festgelegt ist:

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

// Feld.Wert = Wortgrenze (Feld.Wert, 8);

0

Oder Sie könnten so etwas wie:

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

Welches ist Ihre Leerzeichen intakt halten würde.

3

Ich würde dies wahrscheinlich verwenden:

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

Dies wird die Leerzeichen am Anfang und zwischen den Worten bewahren.

0

Diese Funktion begrenzen, und erlauben keine Worte mehr:

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

Beispiel 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 einfach Abzählbare Plugin
ein Zeichen oder ein Wortzähler Bietet (und Begrenzer) für jede Texteingabe oder Textbereich. Funktioniert beim Eingeben oder Einfügen von Text.

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

Copyright (c) 2009-2010 Aaron Russell
Doppel unter den http://www.opensource.org/licenses/mit-license.php MIT lizenziert
und GPL http://www.opensource.org/licenses/gpl-license.php Lizenzen.

2

dies auch Hilfe

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

Ich habe es wie dieses

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

Diese Antwort wurde aufgrund ihrer Länge zur Qualitätsbewertung vorgemerkt. SO bevorzugt Antworten mit etwas Text, der erklärt, wie dieser Code das Problem des OP löst. Bitte lesen [antworten]. Vielen Dank. –

+0

jetzt besser @EngineerDollery? –

+0

Ich persönlich denke, die Lösung war einfach genug, dass sie nicht viel Verbagen brauchte. Aber, es wurde markiert, und leider wird es wieder markiert werden. Ich denke, dass das Markierungssystem die Balance von Text zu Code überprüft, und Sie haben den Code noch länger gemacht, so dass Ihr Gleichgewicht noch mehr verzerrt ist. –

Verwandte Themen