2009-10-23 31 views
7

Trông giống như một nhiệm vụ đơn giản - có được một regex mà kiểm tra một chuỗi cho riêng chiều dài:. ^ {1500} $Regex để hạn chế chiều dài chuỗi cho các chuỗi với ký tự dòng mới

Nhưng nếu một chuỗi có "\ r \ n "so với kết quả trên luôn thất bại!

Làm cách nào để regex chính xác trông giống như chấp nhận các ký tự dòng mới như một phần của chuỗi?

Tôi có một <asp:TextBox TextMode="Multiline"> và sử dụng một RegularExpressionValidator để kiểm tra độ dài của các loại gì người dùng trong.

Cảm ơn bạn, Andrey

Trả lời

12

Bạn có thể sử dụng tùy chọn RegexOptions.Singleline khi xác thực đầu vào. Điều này xử lý các đầu vào như là một tuyên bố dòng đơn và phân tích nó như vậy.

Nếu không, bạn có thể cung cấp cho các biểu thức sau đây thử xem:

^(.|\s){1,500}$ 

này nên làm việc ở đầu vào có nhiều dòng.

+0

Bạn có thể thay thế giá đỡ đóng bằng giá đỡ xoăn không; nếu không nó hoạt động, cảm ơn! – Andrey

+0

Cố định lỗi đánh máy :-) –

+0

Được thăng hạng nhưng những người sử dụng tính năng này để xác thực nên thận trọng về mặt kỹ thuật, điều này có thể bị bỏ qua với 500 [ENTER] chẳng hạn. – AmmarCSE

0

Bạn có thể tước ngắt dòng trước khi kiểm tra độ dài của chuỗi? Điều đó có thể dễ dàng thực hiện khi xác thực phía máy chủ. (Trong .net, bạn có thể sử dụng trình xác thực tùy chỉnh cho điều đó)

Từ góc độ UX, mặc dù, tôi cũng sẽ thực hiện 'bộ đếm ký tự' phía máy khách. Có rất nhiều thứ để tìm thấy. jQuery có một vài tùy chọn. Sau đó, bạn có thể triển khai trình xác thực tùy chỉnh để chỉ chạy phía máy chủ và sau đó sử dụng bộ đếm ký tự làm xác thực phía máy khách của bạn. Đẹp hơn nhiều cho người dùng để xem có bao nhiêu ký tự họ đã để lại KHI họ đang gõ.

+0

Tôi đang sử dụng RegularExpressionValidator của asp.net, nó xác thực cả hai phía máy khách và máy chủ bằng cách cung cấp regex – Andrey

+0

Đề xuất của tôi là sử dụng phía máy chủ chỉ REGEX (tắt phía máy khách cho điều khiển đó) vì nó thực sự chỉ để xác thực dữ liệu đi vào DB. Phía khách hàng, thay vì xác nhận nó sau khi thực tế, tôi muốn đề nghị một 'nhân vật truy cập' sống vì nó là một chỉ báo đẹp hơn nhiều từ quan điểm kinh nghiệm người dùng. Điều này sẽ thực sự chỉ có ý nghĩa nếu bạn đã sử dụng jQuery hoặc một cái gì đó vì nó sẽ dễ dàng để thêm vào. Nếu không, có lẽ không đáng để chỉ cho một lĩnh vực này. –

+0

er, hãy để tôi thuật lại ... nếu REGEX vẫn là một vấn đề, hãy xác thực phía máy chủ bằng cách sử dụng điều khiển tùy chỉnh. Bạn chỉ có thể kiểm tra độ dài chuỗi dễ dàng phía máy chủ và quên REGEX. Sau đó, sử dụng phương thức javascript đếm trực tiếp các ký tự phía máy khách. –

0

Không có khả năng đặt RegexOptions đang vặn bạn ở đây. Vì đây là một RegularExpressionValidator, bạn có thể thử thiết lập các tùy chọn trong chính biểu thức chính quy.

Tôi nghĩ rằng điều này sẽ làm việc:

(?s)^.{1,500}$ 

Phần bật tùy chọn Singleline mà sẽ cho phép các dấu chấm để phù hợp với tất cả các nhân vật feeds bao gồm dòng (s?). Đối với những gì nó có giá trị, và ký hiệu cần thiết để đặt chúng như là một tuyên bố nội tuyến.

+0

+1 đề xuất tốt. BTW, trang web đẹp (RegexHero.net) :) –

+0

Cảm ơn người đàn ông. Tôi thử.;) –

+0

Biểu thức này bị hỏng trong xác thực phía máy khách - Javascript không hiểu (? S) – Andrey

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