2009-10-23 26 views
7

Parece una tarea simple - obtener una expresión regular que pone a prueba una cadena para concreto longitud:. ^ {1500} $expresión regular para limitar la longitud de la cadena para cadenas con caracteres de nueva línea

Pero si una cadena tiene "\ r \ n "que la coincidencia anterior siempre falla!

¿Cómo debería verse la expresión regular correcta para aceptar nuevos caracteres de línea como parte de la cadena?

Tengo un <asp:TextBox TextMode="Multiline"> y utilizar un RegularExpressionValidator para comprobar la longitud de los tipos de usuario en lo que.

Gracias, Andrey

Respuesta

12

Puede utilizar la opción RegexOptions.Singleline al validar la entrada. Esto trata la entrada como una declaración de línea única y la analiza como tal.

de lo contrario podría dar la siguiente expresión intentarlo:

^(.|\s){1,500}$ 

Esto debería funcionar en las entradas de varias líneas.

+0

¿Puede reemplazar el soporte de cierre con soporte rizado; de lo contrario, funcionó, ¡gracias! – Andrey

+0

Se corrigió el error tipográfico :-) –

+0

Upvoted, pero los que usan esto para la validación deben tener cuidado de que, técnicamente, esto se puede omitir con 500 [ENTER] por ejemplo. – AmmarCSE

0

¿Se puede despojar a los saltos de línea antes de comprobar la longitud de la cadena? Eso sería fácil de hacer al validar el lado del servidor. (En .net podría usar un validador personalizado para eso)

Desde una perspectiva de UX, implementaría un "contador de caracteres" del lado del cliente también. Hay mucho para encontrar. jQuery tiene algunas opciones. Luego puede implementar el validador personalizado para que solo se ejecute en el lado del servidor, y luego usar el contador de caracteres como su validación del lado del cliente. Mucho mejor para el usuario ver cuántos caracteres le quedan mientras están escribiendo.

+0

Utilizo RegularExpressionValidator de asp.net, validaciones del lado del cliente y del servidor usando regex proporcionado – Andrey

+0

Mi sugerencia es usar el lado del servidor REGEX solamente (desactivar el lado del cliente para ese control) ya que eso es solo para validar datos yendo a la base de datos. En el lado del cliente, en lugar de validarlo después del hecho, sugeriría un "contador de caracteres" en vivo, ya que es un indicador mucho más agradable desde la perspectiva de la experiencia del usuario. Esto realmente solo tendría sentido si ya está usando jQuery o algo así, ya que sería fácil de agregar. Si no, quizás no valga la pena solo para este campo. –

+0

er, permítanme reformular ... si el REGEX sigue siendo un problema, valide el lado del servidor utilizando un control personalizado. Usted podría simplemente verificar la longitud de la cadena fácilmente desde el lado del servidor y olvidarse de REGEX. A continuación, utilice el método javascript de recuento vivo de los caracteres del lado del cliente. –

0

La incapacidad de configurar las RegexOptions te está aturdiendo aquí. Dado que se trata de un RegularExpressionValidator, puede probar configurando las opciones en la expresión regular.

creo que esto debería funcionar:

(?s)^.{1,500}$ 

La parte activa la opción SingleLine que permitirá el punto para que coincida con todos los personajes alimenta incluyendo la línea (s?). Por lo que vale, y la notación necesaria para establecerlos como una declaración en línea.

+0

+1 buena sugerencia. Por cierto, buen sitio (RegexHero.net) :) –

+0

Gracias hombre. Lo intento.;) –

+0

Esta expresión se rompe en la validación del lado del cliente - Javascript no comprende (? S) – Andrey

Cuestiones relacionadas