2012-01-06 28 views
6

Tengo un cuadro de texto html simple. Cuando "envío" el formulario en el que está el cuadro de texto, me gustaría obtener una variable con el número de palabras dentro utilizando Jquery. También me gustaría comprobar si el texto ingresado es solo letras, números y guiones (también en jquery). No necesito contar las palabras como los tipos de usuario, solo cuando se envía el formulario. El formulario no se enviará si jquery está desactivado, así que supongo que no hay riesgos de seguridad al no usar php. ¿Es esto cierto?Cómo contar palabras en JavaScript usando JQuery

HTML:

<input type='text' name='name' id='name' /> 
<input type='button' value='Sign Up' id='signUp'> 

JQUERY (intento):

var wordcount = $('#name').val() // i don't know how to count the words 
+0

esto sería mejor titulado "Cómo contar palabras Javascript usando jQuery." – Nick

+0

@nick actualizado. gracias – kirby

+0

_ "El formulario no se enviará si jquery está apagado así que supongo que no hay riesgos de seguridad al no usar php. ¿Es esto cierto?" _ - depende de lo que quiere decir con "riesgos de seguridad": debe validar el servidor de entrada lado porque los usuarios malintencionados pueden usar herramientas de desarrollo para eludir la validación del lado del cliente. La misma validación en el cliente es un extra opcional para mejorar la experiencia del usuario. Por cierto, esto no es realmente una cosa jQuery tanto como una cosa "normal" de expresiones regulares de JavaScript y '.split()'. – nnnnnn

Respuesta

14

Se podría dividir la cadena y luego contar el longitud de la matriz resultante.

$('input[type="submit"]').click(function() { 
    var words = $('#name').val().split(' '); 
    alert(words.length); 
}); 
+0

gracias.¿Hay alguna manera de comprobar si estos caracteres son solo letras, números y guiones en jquery? – kirby

+0

sí, querrá usar una expresión regular para eso. Puede ejecutar una prueba y el resultado será verdadero/falso si coincide con sus criterios de selección. Los regexes no son mi fuerte, así que es posible que desee formular una nueva pregunta. Voy a tomar una puñalada de todos modos. – mrtsherman

+0

Esto no va a funcionar tan bien como cada espacio que pones entre las palabras se contará como otras palabras, así que "ayúdame" serían 6 palabras. – KXL

1
var str = $('#name').val(), 
    count = str.split(' ').length; 

Suponiendo que cada palabra está separado por un espacio

+0

estoy bastante seguro de que simplemente da la cantidad de caracteres. Estoy tratando de encontrar el número de palabras – kirby

+0

Lo leí mal en caso de accidente. 'split' separará la cadena en una matriz de espacios – Trevor

+0

val(). length devuelve un número, hay un error aquí. – dlopezgonzalez

1

se pueden especificar varios caracteres para dividir la cadena de fuente:

$('input[type="submit"]').click(function() { 
    var words = $('#name').val().split(/[\s\.,;]+/); 
    console.log(words.length); 
}); 
2

es muy útil para eliminar los espacios en blanco del principio y el final de la cadena de usign $.trim(). Puede usar el evento keyup para un recuento de en tiempo real.

$('#name').keyup(function(){ 
    var words = $.trim($(this).val()).split(' '); 
    console.log(words.length); 
}); 
6

una ligera mejora en otras respuestas que se ocupa de más casos extremos. es decir, utilizando múltiples espacios y puntuación juntos y también maneja la puntuación al principio y al final del texto correctamente.

var numOfWords = $('#name').val().replace(/^[\s,.;]+/, "").replace(/[\s,.;]+$/, "").split(/[\s,.;]+/).length; 

Primero quita cualquier puntuación y espacios al principio y al final del texto y luego cuenta lo que queda. Obviamente, uno puede agregar más puntuación (como signos de exclamación) si es necesario.

0

Usando la expresión regular a continuación nos permite eliminar cualquier tipo de espacio en blanco (individual o múltiplos) para que el recuento sea muy preciso.

$('#name').keyup(function(){ 
    var wordCount = $(this).val().split(/[\s\.\?]+/).length; 
    console.log(wordCount); 
}); 

Ver este plugin jQuery que he desarrollado:

https://github.com/mcdesignpro/maxLenght

+0

He actualizado mi respuesta para usted @Toby Speight :) ¡Espero que ayude! – Marco

Cuestiones relacionadas