2011-06-09 61 views
5

Estoy tratando de expresar el contenido de un área de texto entre 4 y 138 caracteres.Expresión regular solo para longitud: cualquier carácter

Mi expresión regular es la siguiente: - "" '/^.{4,138}$/'

Pero quiero que el usuario sea capaz de incluir caracteres de retorno, que creo que la les impide hacer. ¿Pensamientos sobre lo que necesito cambiar?

EDIT:

Es obvio que hay otras maneras de conseguir la longitud del texto - strlen ... etc, pero estoy en busca de expresiones regulares en concreto debido a la naturaleza del cheque (es decir, un plugin que requiere regex)

Respuesta

6

Quiero que el usuario pueda incluir caracteres de retorno, que creo que son "." les impide hacer. ¿Pensamientos sobre lo que necesito cambiar?

O bien:

  • cambio del .-[\s\S](espacio en blanco/saltos de línea son parte de \s, todo el resto es parte de \S)
  • utilizar el SINGLE_LINE (también conocido como dotall) regex flag/…/s
+0

[\ s \ S] funciona - ¡gracias! :) – Dave

6

¿Por qué no solo verifica la longitud de la cuerda usando strlen? Sería mucho más eficiente que hacer una expresión regular. Además, puedes dar mensajes de error significativos.

$length = strlen($input); 

if ($length > 138) 
    print 'string too long'; 
else if ($length < 4) 
    print 'string too short'; 
+0

Es código creado a través de un plug-in - cambiándola a no regulares, que tendría que rewirte el plugin. – Dave

+0

(Mi pregunta no era "cómo encontrar la longitud de una cadena en PHP" - específicamente pidió una expresión regular.) – Dave

+0

wow. eso es un diseño pobre en el complemento. –

1

Trate '/^.{%d,%d}$/s' tener . nuevas líneas de los partidos también.

1

O bien

/^.{4,138}$/s 

o

/^[\s\S]{4,138}$/ 

coincidirá con saltos de línea.

La bandera s le dice al motor que lo trate como una sola línea, por lo que . coincidirá con \n además de lo que generalmente coincide. Tenga en cuenta que esto también hace ^ y $ a coincidir al principio y al final de la cadena de toda (en lugar de sólo el principio/final de cada línea de ) a menos que también utiliza el indicador m.

Here's some more info on regex flags.

Cuestiones relacionadas