2009-09-24 21 views
5

He hecho un poco de búsqueda sobre esto. Encontrado un montón de secuencias de comandos que cuentan los personajes e incluso cuentan las palabras, pero no pudo encontrar uno que elimina las palabras que van por encima del límite de palabras ....Limitar palabras en un área de texto

Aquí es mi guión hasta el momento ...:

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

Tengo la siguiente línea, que he copiado de un guión recuento de caracteres, pero obviamente esto no funcionará porque yo estoy contando palabras

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

¿Cómo hago el guión borrar cualquier palabra extra añadido por encima del límite? Necesito esto especialmente si pegan en una descripción ... Necesita contar las palabras y luego eliminar cualquier palabra por encima del límite.

¡Apreciar tu ayuda!

+0

** ** Definición de la palabra, por favor. ¿Son estas palabras - "autónomo", "43 °", "café", "курица"? – kangax

Respuesta

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

actualización
me di cuenta de que esto también cuenta n espacios en una fila como n-1 palabras, las cuales se corrigen este:

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 = wordlimit (field.value, 8);

0

O usted podría hacer algo como:

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

que mantendría intacta su espacio en blanco.

3

que probablemente utilice este:

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

Esto preservará el espacio en blanco en el inicio y entre las palabras.

0

Esta función va a limitar, y no permitir más palabras:

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

Ejemplo 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 Simplemente plug-in Contable
Proporciona un contador de caracteres o una palabra (y limitador) para cualquier entrada de texto o área de texto. Funciona al escribir o pegar texto.

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

Derechos de autor (c) 2009-2010 Aaron Russell
doble licenciado bajo la MIT http://www.opensource.org/licenses/mit-license.php
y GPL http://www.opensource.org/licenses/gpl-license.php licencias.

2

bien esto ayuda

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

lo hice como esto

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

Esta respuesta ha sido marcada para revisión de calidad debido a su longitud. SO prefiere respuestas con algún texto que explique cómo este código resuelve el problema del OP. Por favor, lea [respuesta]. Gracias. –

+0

mejor ahora @EngineerDollery? –

+0

Personalmente, creo que la solución fue lo suficientemente simple como para no necesitar muchos errores. Pero, se marcó y, lamentablemente, se marcará nuevamente. Creo que el sistema de marcado analiza el equilibrio de texto a código, y usted ha hecho que el código sea aún más largo para que su saldo esté aún más sesgado. –

Cuestiones relacionadas