2009-07-06 26 views
5

Quiero validar una cadena que contiene solo números. Validación fácil? Agregué RegularExpressionValidator, con ValidationExpression = "/ d +".RegularExpressionValidator no se activa en la entrada de espacio en blanco

Se ve bien, pero nada se valida cuando solo se ingresa espacio. Incluso muchos espacios están validados de acuerdo. No necesito que esto sea obligatorio.

Puedo recortar en el servidor, pero la expresión regular no puede hacer todo!

Respuesta

11

Esto es por diseño y tiende a echar a muchas personas. El CommonExpressionValidator no hace que un campo sea obligatorio y permite que esté en blanco y acepta espacios en blanco. El formato \ d + es correcto. Incluso el uso de^\ d + $ dará como resultado el mismo problema de permitir el espacio en blanco. La única forma de forzar esto para que no permita el espacio en blanco es incluir un RequiredFieldValidator para operar con el mismo control.

Esto es por la RegularExpressionValidator documentation, que establece:

validación se realiza correctamente si el control de entrada está vacía. Si se requiere un valor de para el control de entrada asociado , use un control RequiredFieldValidator además del control RegularExpressionValidator.

Una comprobación de expresión regular del campo en el código subyacente funcionaría como se esperaba; esto es solo un problema con RegularExpressionValidator. Por lo tanto, podría usar un CustomValidator en su lugar y decir args.IsValid = Regex.IsMatch(txtInput.Text, @"^\d+$") y si contenía espacios en blanco, devolvería false. Pero si ese es el caso, ¿por qué no utilizar el RequiredFieldValidator según la documentación y evitar escribir código personalizado? También un CustomValidator significa una devolución de datos obligatoria (a menos que especifique un script de validación del cliente con una expresión regular javascript equivalente).

+1

todos los espacios en blanco se consideran vacíos? parece que el ajuste en el servidor es la respuesta. –

+0

Sí, dejarlo en blanco o agregar espacios en blanco es el mismo. Una vez que se ha ingresado un carácter, se activará el validador, por lo que ingresar "10" es válido. Puede mantenerlo como está, sabiendo que lo que sea que lo haga será un número válido o un espacio en blanco. En cualquier caso, recorte su valor. –

+1

gracias Ahmad. ¡ojalá que los documentos de MSDN dijesen "todos los espacios en blanco están vacíos"! –

1

Su pregunta es un poco difícil de seguir, pero si se preguntan cómo escribir una expresion regular que sólo se acepta dígitos Creo que su error está en el uso de barras diagonales en lugar de barras diagonales inversas. Trate

"\d+"

+0

sí, lo he intentado. déjame intentar explicar ingresando en el cuadro de texto: "55" - válido. "55x" - falla (esto es bueno). "" - ¡válido! (¡no tan bien!) –

+0

Ok, en tu ejemplo dijiste que usaste "/ d +", que es muy diferente de "\ d +" en expresiones regulares. ¿Has intentado agregar RequiredFieldValidator también? Esto podría evitar que "" sea legal. No es 100% positivo, no pretendo ser un experto en asp.net;) – Scanningcrew

0

Trate de usar^\ d + $ forzar los dígitos para llenar toda la línea. ^ = inicio de línea $ = final de línea

+0

IIRC,^y $ están implícitos cuando se usa un validador Regex. – Cerebrus

+0

Yo "asumí" eso yo mismo, pero me pican las coincidencias inesperadas en el pasado. Oh, espera, eso es puro RegEx. No estoy seguro sobre el validador –

1

El RegularExpressionValidator es un buen contenedor para realizar comprobaciones de expresiones regulares, pero no se validará frente a un control vacío. Podría usar un Custom Validator y luego hacer la comprobación de expresión regular en una función de javascript que adjunte al validador.

Validará contra un control vacío (en blanco) siempre que establezca la propiedad ValidateEmptyText en verdadero.

Puede leer más sobre CustomValidators en MSDN here.

+0

Para agregar a esto, mientras que una secuencia de comandos del cliente se puede utilizar con un CustomValidator, sería aconsejable incluir también la validación del lado del servidor para cubrir todas las bases. –

Cuestiones relacionadas