2012-06-29 37 views
5

Tôi đang cố gắng sử dụng một số RegularExpressionValidator để xác thực độ dài nhập TextBox. Tôi có nó hoạt động, nhưng nó chỉ chấp nhận chữ cái và số. Tôi muốn cho phép bất kỳ ký tự nào, chỉ có không quá 25 ký tự.RegularExpressionValidator để giới hạn độ dài đầu vào mà không có giới hạn về các loại ký tự

<asp:TextBox ID="MenuLabel" runat="server" /> 
<asp:RegularExpressionValidator ValidationExpression="^[a-zA-Z0-9]{25}$" ID="MenuLabelVal" runat="server" ErrorMessage="Menu Label must be no longer than 25 characters." ControlToValidate="MenuLabel" /> 

Biểu thức thông thường không phù hợp mạnh mẽ của tôi, vì vậy ai đó có thể cho tôi biết làm thế nào tôi sửa đổi ^[a-zA-Z0-9]{25}$ để đại diện cho bất kỳ ký tự lên đến 25 lần thay vì chỉ alpha-số.

Lưu ý 1: Tôi đã có RequiredFieldValidator để đảm bảo 1 hoặc nhiều ký tự.

Note 2: Tôi biết tôi chỉ có thể sử dụng MaxLength tài sản trên TextBox, tuy nhiên hình thức này cũng là để chỉnh sửa dữ liệu hiện có, và tôi không muốn nó chỉ đơn giản là cắt ngắn ghi hiện có khi chỉnh sửa. Tôi muốn triển khai trình xác thực giúp người dùng chỉnh sửa dữ liệu hiện có mà họ cần để rút ngắn giá trị, thay vì hình thức cắt xén mà người dùng không nhận ra.

Lưu ý 3: Tôi đang mở cho các giải pháp thay thế, chẳng hạn như trình xác thực tùy chỉnh, miễn là nó chỉ dựa vào xác thực phía máy khách. Tôi không có quyền truy cập vào mã-đằng sau để viết một trình xử lý hợp lệ tùy chỉnh trên máy chủ.

Trả lời

14
.{1,25} 

nên hạn chế giá trị bất kỳ từ 1 đến 25 lần. Bạn không chắc chắn cách thức này sẽ xử lý đầu vào unicode mặc dù nó có thể đếm các ký tự nhiều byte như một char đơn, vì vậy hãy cẩn thận nếu bạn đang sử dụng nó để giới hạn cho một cơ sở dữ liệu

có thể bạn muốn ^.{1,25}$. phiên bản đơn giản nên hoạt động

+0

Cảm ơn tôi sẽ thử. Hình thức hiện tại không có xác nhận, chỉ cần một MaxLength đặt trên TextBox cho 125, vì vậy ít nhất nó có một giới hạn hart trên nó. –

+0

Phiên bản thứ hai sẽ nhanh hơn – abatishchev

+0

Ok Tôi đã thử cả '. {25}' và '^. {25} $'. Cả hai hiển thị hợp lệ với 0 hoặc 25 ký tự. 1 đến 24 xác thực là không hợp lệ. Có nên là '^. {1,25}'? –

4

Nếu bạn sử dụng một validator tùy chỉnh, sau đó bạn có thể làm một cái gì đó như thế này:

<asp:CustomValidator ID="MenuLabelVal" runat="server" ClientValidationFunction="ValidateFieldLegth" ErrorMessage="Menu Label must be no longer than 25 characters." ControlToValidate="MenuLabel" EnableClientScript="true" /> 

Và javascript của bạn sẽ là một cái gì đó như thế này:

<script>  
    function ValidateFieldLegth(sender, args) { 
     var v = document.getElementById('<%=MenuLabel.ClientID%>').value; 
     if (v.length > 25) { 
      args.IsValid = false; 
     } 
     else { 
      args.IsValid = true; 
     } 
    } 
</script> 
+0

Cảm ơn giải pháp này. Nó thực sự hoạt động khá tốt, nhưng tôi đã chọn để ở lại với cách tiếp cận biểu thức chính quy kể từ khi từ một quan điểm đánh dấu là đơn giản hơn việc giới thiệu thêm kịch bản. Tôi đã +1 nó như một cách tiếp cận hoàn toàn hợp lệ. –

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