2009-07-06 16 views
5

Tôi muốn xác thực chuỗi chỉ chứa số. Xác thực dễ dàng? Tôi đã thêm RegularExpressionValidator, với ValidationExpression = "/ d +".RegularExpressionValidator không kích hoạt trên mục nhập trắng

Có vẻ ổn - nhưng không có gì được xác thực khi chỉ nhập không gian! Thậm chí nhiều không gian cũng được xác thực. Tôi không cần điều này là bắt buộc.

Tôi có thể cắt trên máy chủ, nhưng không thể biểu hiện chính quy làm mọi thứ!

Trả lời

11

Đây là thiết kế và có xu hướng ném nhiều người. RegularExpressionValidator không tạo trường bắt buộc và cho phép nó để trống và chấp nhận khoảng trắng. Định dạng \ d + là chính xác. Ngay cả khi sử dụng^\ d + $ sẽ dẫn đến cùng một vấn đề cho phép khoảng trắng. Cách duy nhất để buộc điều này không cho phép khoảng trắng là cũng bao gồm một RequiredFieldValidator để hoạt động trên cùng một điều khiển.

Đây là theo RegularExpressionValidator documentation, trong đó nêu:

Validation thành công nếu việc kiểm soát đầu vào trống. Nếu giá trị là bắt buộc cho điều khiển nhập được liên kết, hãy sử dụng điều khiển RequiredFieldValidator ngoài điều khiển RegularExpressionValidator.

Kiểm tra biểu thức chính quy của trường trong mã sau sẽ hoạt động như mong đợi; đây chỉ là vấn đề với RegularExpressionValidator. Vì vậy, bạn có thể sử dụng CustomValidator một cách có thể thay thế và nói args.IsValid = Regex.IsMatch(txtInput.Text, @"^\d+$") và nếu nó chứa khoảng trắng thì nó sẽ trả về false. Nhưng nếu đó là lý do tại sao không chỉ sử dụng RequiredFieldValidator cho mỗi tài liệu và tránh viết mã tùy chỉnh? Ngoài ra một CustomValidator có nghĩa là một postback bắt buộc (trừ khi bạn chỉ định một kịch bản xác nhận khách hàng với javascript tương đương regex).

+1

tất cả các khoảng trống được coi là rỗng? trông giống như cắt trên máy chủ là câu trả lời. –

+0

Có, để trống hoặc thêm khoảng trắng giống nhau. Khi ký tự được nhập, trình xác thực sẽ kích hoạt, do đó, nhập "10" hợp lệ. Bạn có thể giữ nó như nó được, biết rằng bất cứ điều gì làm cho nó thông qua sẽ là một số hợp lệ hoặc khoảng trắng. Trong cả hai trường hợp, hãy cắt giảm giá trị của bạn. –

+1

cảm ơn Ahmad. tôi muốn tài liệu MSDN sẽ nói "tất cả khoảng trắng trống"! –

1

Câu hỏi của bạn là một chút khó khăn để làm theo, nhưng nếu bạn đang yêu cầu làm thế nào để viết một cụm từ thông dụng mà chỉ chấp nhận chữ số Tôi nghĩ rằng sai lầm của bạn là sử dụng dấu gạch chéo chuyển tiếp thay vì dấu gạch chéo ngược. Hãy thử

"\d+"

+0

có, tôi đã thử. hãy để tôi thử giải thích. nhập vào hộp văn bản: "55" - hợp lệ. "55x" - không thành công (điều này là tốt). "" - hợp lệ! (không tốt lắm!) –

+0

Ok, trong ví dụ của bạn, bạn đã nói bạn đã sử dụng "/ d +" rất khác "\ d +" trong regex. Bạn đã thử thêm RequiredFieldValidator chưa? Điều này có thể ngăn chặn "" là hợp pháp. Không 100% tích cực, tôi không tuyên bố là chuyên gia asp.net;) – Scanningcrew

0

Hãy thử sử dụng^\ d + $ để buộc các chữ số để lấp đầy toàn bộ dòng. ^ = dòng bắt đầu $ = dòng kết thúc

+0

IIRC,^và $ là ẩn khi sử dụng trình xác thực Regex. – Cerebrus

+0

Tôi "giả định" bản thân mình, nhưng bị cắn bởi những trận đấu bất ngờ trong quá khứ. Oh, khoan đã, waas tinh khiết RegEx. Không chắc chắn về trình xác thực. –

1

RegularExpressionValidator là trình bao bọc đẹp để thực hiện kiểm tra regex nhưng nó sẽ không xác thực đối với điều khiển trống. Bạn có thể sử dụng CustomValidator và sau đó thực hiện kiểm tra biểu thức chính quy trong một hàm javascript mà bạn đính kèm với trình xác nhận hợp lệ.

Nó sẽ xác thực đối với điều khiển trống (trống) miễn là bạn đặt thuộc tính ValidateEmptyText thành true.

Bạn có thể đọc thêm về CustomValidators trên MSDN here.

+0

Để thêm vào điều này, trong khi một kịch bản khách hàng có thể được sử dụng với một CustomValidator nó sẽ là khôn ngoan cũng bao gồm xác nhận phía máy chủ để trang trải tất cả các căn cứ. –

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