2009-04-26 29 views
11

Tengo el siguiente conjunto de expresiones regulares como la propiedad ValidationExpression en un RegularExpressionValidator en un formulario web. Cuando ingreso un carácter ilegal en el control validado, el validador lo detecta y muestra un mensaje de error.RegularExpressionValidator no detecta cadenas vacías

<appSettings> 
    <add key="categoryPattern" value="^[a-zA-Z0-9_+\-() ]{1,50}$" /> 
</appSettings> 

Mi validador:

<asp:RegularExpressionValidator ValidationExpression="<%$ AppSettings:categoryPattern %>" 

Mi servidor de validación del lado:

Regex rex = new Regex(ConfigurationManager.AppSettings["categoryPattern"]); 
if (!rex.Match(categoryName).Success) 
{ 
    throw new ArgumentException("CategoryName must match expression: " + rex); 

Como se puede ver, exactamente el mismo patrón se aplica lado del cliente y del lado del servidor.

Sin embargo, cuando borro el control validado y envío una cadena vacía, el validador piensa que está bien y me da un error de mi validación del lado del servidor. ¿Alguien sabe qué está mal aquí, a excepción del contrato roto de RegularExpressionValidator?

Respuesta

17

Es por diseño. También debe agregar un RequiredFieldValidator para forzar la entrada del usuario. RegularExpressionValidator asume que los campos vacíos son válidos (y ni siquiera los ejecuta a través del Regex). La razón detrás de esto es que, por ejemplo, puede tener un campo opcional Email address 2 en el formulario que no es necesario, pero si se ingresa, debe ser una dirección de correo electrónico válida. Para lograr esto fácilmente, otros validadores ignoran los campos vacíos y si necesita hacerlos necesarios, simplemente agregaría otro RequiredFieldValidator.

De hecho, no es necesario manualmente revalidar en el servidor. Los validadores de ASP.NET también son compatibles con la validación del lado del servidor. Puede marcar la propiedad Page.IsValid.

+0

Gracias @Mehrdad, he agregado un RequiredFieldValidator, pero la validación de mi servidor no está en la página, sino en la clase utilizada por la página y posiblemente con otro código, así que lo guardo. – ProfK

+0

De nada. –

Cuestiones relacionadas