2009-02-19 7 views
5

Tengo una HtmlTextArea y quiero restringir el número de caracteres usuarios pueden ingresar a 500.La validación de entrada de texto de varias líneas al utilizar .NET

Actualmente He usado un RegularExpressionValidator ...

RegularExpressiondValidator val = new RegularExpressiondValidator(); 
val.ValidationExpression = "^.{0,500}$"; 
val.ControlToValidate = id; 
val.ErrorMessage = "blah"; 

... esto está bien cuando el texto se ingresa en una sola línea pero al instante falla la validación siempre que el texto incluya un nuevo carácter de línea (es decir, es multilínea).

Me doy cuenta de que hay diferentes motores de expresiones regulares y necesito probar con el .NET (¿alguien puede indicarme uno bueno en línea?) Pero he intentado un par de cosas más, incluida la preprocesamiento " (? m) "a mi cadena de expresiones, y reemplazando^y $ con \ A y \ Z, pero hasta ahora no tuve suerte.

Otra pregunta relacionada, ¿puedo evitar el uso de una expresión regular y vincular este validador a mi propia función de validación de alguna manera?

Respuesta

6

el "." no incluye nuevas líneas

^((|. \ N) {0500}) $

This page también podría ayudar, es una hoja de trucos de expresiones regulares.

+1

Es necesario utilizar parens en lugar de corchetes. Los paréntesis indican O pero usted agregó el | en su también. – JaredPar

+0

Sí, lo actualicé inmediatamente después de darme cuenta de que lo había hecho. – ccook

+0

Lo pensé un poco más y creo que todavía habría funcionado. El | en ese caso era superfluo. Sin embargo, no puedo recordar el 100% si \ n en a [] se trata como 2 caracteres o un escape de nueva línea. – JaredPar

6

Cambiar la expresión regular a la siguiente

"^(.|\n){0,500}$"; 

El. el personaje combina todo excepto una nueva línea. La o cláusula solucionará su problema.

1

Haría esto de dos maneras, si conoce Javascript y desea restringir la longitud del carácter del lado del cliente, podría hacerlo con jQuery (una popular biblioteca de extensión de JavaScript).

$(document).ready(function(){ 
    var $TextBox = $("#<%=TextBox.ClientID %>"); 

    $TextBox.keyup(function(){ 
    return $TextBox.length <= <%=TextBox.MaxLength %>; 
    }); 
}); 

Luego haga un control similar en el lado del servidor con un Validador personalizado o en el método de clic de su botón.

También hay formas de habilitar y deshabilitar validadores ASP.Net con javascript para que también pueda examinar eso.

+0

Interesante, pero ¿no pierdes la "integridad" del control? Es decir, ¿la mitad de la validación está en el validador del lado del servidor, mientras que la otra mitad está en la página? – ccook

+0

tu solución es obviamente la más elegante. Solo pensé en tirar una alternativa. Tengo Validadores ASP.Net para algunas cosas. – hunter

Cuestiones relacionadas