2009-04-26 36 views
11

Tôi có regex sau được đặt làm thuộc tính ValidationExpression trên RegularExpressionValidator trong biểu mẫu web. Khi tôi nhập một ký tự không hợp lệ trong điều khiển được xác thực, trình xác nhận sẽ phát hiện ra và hiển thị thông báo lỗi.RegularExpressionValidator không phát hiện chuỗi trống

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

validator của tôi:

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

My phía máy chủ xác nhận:

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

Như bạn có thể thấy, chính xác cùng một khuôn mẫu được áp dụng phía khách hàng và phía máy chủ.

Tuy nhiên, khi tôi xóa kiểm soát đã xác thực và gửi một chuỗi rỗng, trình xác thực cho rằng điều đó là OK và tôi gặp lỗi do xác thực phía máy chủ của tôi. Bất cứ ai biết những gì là sai ở đây, ngoại trừ các hợp đồng bị hỏng của RegularExpressionValidator?

Trả lời

17

Đó là theo thiết kế. Bạn cũng nên thêm RequiredFieldValidator để buộc người dùng nhập. RegularExpressionValidator giả định các trường trống là hợp lệ (và thậm chí không chạy chúng thông qua Regex). Lý do đằng sau điều này là ví dụ, bạn có thể có một trường tùy chọn Email address 2 trong biểu mẫu không bắt buộc, nhưng nếu được nhập, nó phải là địa chỉ email hợp lệ. Để dễ dàng thực hiện điều này, các trình xác nhận khác bỏ qua các trường trống và nếu bạn cần yêu cầu chúng, bạn chỉ cần thêm một số khác RequiredFieldValidator.

Thực tế, không cần phải thủ công xác thực lại trên máy chủ. Trình xác thực ASP.NET cũng hỗ trợ xác thực phía máy chủ được xây dựng. Bạn chỉ có thể kiểm tra tài sản Page.IsValid.

+0

Cảm ơn @Mehrdad, tôi đã thêm một RequiredFieldValidator, nhưng xác thực máy chủ của tôi không có trên trang, nhưng trong lớp được sử dụng bởi trang, và có khả năng mã khác, vì vậy tôi giữ nó. – ProfK

+0

Bạn được chào đón. –

Các vấn đề liên quan