2009-02-17 21 views
7

¿Alguien tiene una expresión regular que trabajaría para limitar el número de palabras en una respuesta? Por ejemplo, me gustaría usarlo con jQuery validate para poder restringir un textbox/textarea para que tenga, por ejemplo, 250 palabras. Los cuadros serán texto sin formato.Limite el número de palabras en una respuesta con una expresión regular

que he hecho algunas google pero ninguno de los que he encontrado eran muy buenos. En su mayoría se centraron en hacer \ b \ w + \ b, pero tuve problemas para hacerlo funcionar.

+0

Podría tener más sentido para contar caracteres - no hay nada que impida que la gente de sólo escribir y escribir y escribiendo sin espacios ... ¡dicho eso, la respuesta de VonC se ve excelente! –

+0

¿Qué pasa con la puntuación? ¿Requiere que sus usuarios escriban solo caracteres de palabras y espacios en blanco? –

Respuesta

8

Podría tratar:

^(?:\b\w+\b[\s\r\n]*){1,250}$ 

que limitaría a 250 palabras a través de múltiples líneas.

Me temo que la propuesta inicial de la Alan:

/^\w+(?:\s+\w+){0,249}$/ 

podría ser un caso de catastrophic backtracking

Al anidar operadores de repetición, estar absolutamente seguro de que no hay una sola manera de coincidir con el mismo partido

+0

Esto pareció funcionar en mis pruebas. No estoy seguro de si esta versión tiene algunas desventajas, pero voy a aceptar esta por ahora. – Jonathan

+0

Esto funciona para mí, excepto si entro ", @ devuelve falso. ¿Me puede decir lo que tengo que hacer?, Gracias – iOSAppDev

+0

límites de las palabras @iOSAppDev (http://www.regular-expressions.info/wordboundaries.html) dependen en el sabor regex que estás usando. Si simplemente agregas las comillas como un separador en mi expresión regular original (es decir: '^ (?: \ b \ w + \ b [" \ s \ r \ n] *) {1,250} $ ') no funciona, entonces es mejor buscar una solución alternativa (es decir, "al lado de regex"). – VonC

3

¿Qué hay de dividir el texto con una expresión regular (por ejemplo "\ s +") y luego contar la longitud de la lista resultante? Eso sería algo más fácil de leer.

0

Aquí está la expresión regular que uso para la validación del conteo de palabras.

(\w*\W*){0,250} 
1

Esto ha funcionado bien para mí, por ejemplo, si desea un límite de 6 palabras:

^(?:\w+\W+){0,5}(?:\w+)$ 
Cuestiones relacionadas