2010-06-08 30 views
6

Tôi đang cố sử dụng RegularexpressionValidator để khớp với địa chỉ IP (với các ký tự đại diện có thể) cho hệ thống lọc IP.Cụm từ thông dụng để khớp với địa chỉ IP + ký tự đại diện

Tôi đang sử dụng Regex sau:

"([0-9]{1,3}\\.|\\*\\.){3}([0-9]{1,3}|\\*){1}" 

nào hoạt động tốt khi chạy nó trong LINQPad với Regex.Matches, nhưng dường như không hoạt động khi tôi đang sử dụng các validator.

Có ai có đề xuất là một Regex tốt hơn hoặc lý do tại sao nó sẽ hoạt động trong thử nghiệm nhưng không phải tại chỗ?

Chúc mừng, Ed

+0

Bạn có thể cung cấp một số trường hợp thử nghiệm không khớp đúng không? – VeeArr

+0

@VeeArr Tôi chưa nhận được nó để xác nhận chính xác, vì vậy bất kỳ chuỗi tùy ý, bao gồm cả địa chỉ IP: D –

Trả lời

3

asp:RegularExpressionValidator không yêu cầu bạn phải backslashes-escape tăng gấp đôi. Bạn nên cố gắng:

([0-9]{1,3}\.|\*\.){3}([0-9]{1,3}|\*){1}

+0

Chúc mừng bạn đời! :) –

1

Làm thế nào về việc đặt bắt đầu và chuỗi kết thúc ký tự trên biểu

^([0-9]{1,3}\\.|\\*\\.){3}([0-9]{1,3}|\\*){1}$ 
+0

Đề xuất tốt nhưng tôi sợ rằng vẫn không xác thực! –

2

[0-9] {1,3} sẽ cho phép địa chỉ IP có dạng 999.999.999.999. Dải địa chỉ IP của bạn sẽ chỉ cho phép 0-255.
Thay thế tất cả các lần xuất hiện của [0-9] {1,3} bằng ([0-9] {1,2}) | (1 [0-9] {2,2}) | (2 [0- 4] [0-9]) | (25 [0-5])
Điều này có vẻ rất phức tạp với tôi, và có lẽ có những cách tốt hơn để làm điều này, nhưng nó có vẻ chính xác ngay từ cái nhìn đầu tiên.

+1

Tôi không ầm ĩ về địa chỉ IP thực sự hợp lệ, chỉ có định dạng (dễ phân tích cú pháp sau này), nhưng được lấy điểm. –

5

Điều này: \\.|\\*\\. trông giống như bit tinh nghịch. Làm điều này thay vì:

@"^(([0-9]{1,3}|\*)\.){3}([0-9]{1,3}|\*)$" 

Và để chỉ chấp nhận 0-255 (nhờ, apoorv020):

^((([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\*)\.){3}(([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\*)$ 
+0

Một gợi ý hay khác, nhưng tôi e rằng điều đó cũng không hiệu quả! –

+0

- thử tại http://gskinner.com/RegExr/. Hãy chắc chắn rằng bạn có một '@' ở phía trước của chuỗi. Nếu vẫn không hoạt động, hãy hiển thị cho chúng tôi mã bạn đang sử dụng để khớp với mã đó. Lưu ý tôi đang cố gắng kết hợp nó với những thứ như '192.168. *. * Và' 10. *. *. * '- đây có phải là điều bạn muốn không?Bạn có thể chỉ cho chúng tôi một số trường hợp thử nghiệm không? –

+0

Tôi không nghĩ rằng bạn đọc câu hỏi của tôi khá đúng: Regex gốc của tôi sẽ khớp với địa chỉ IPv4 với các ký tự đại diện không lo lắng, nhưng nó sẽ không hoạt động trong asp: RegularExpressionValidator. Regex của bạn có cùng một vấn đề. –

0

câu trả lời của tôi là chung cho .NET, không RegularExpressionValidator cụ thể.

Regex chuỗi cho phù hợp IP (sử dụng ExplicitCapture để tránh chụp vô dụng và giữ RE ngắn gọn):

"\\b0*(2(5[0-5]|[0-4]\\d)|1?\\d{1,2})(\\.0*(2(5[0-5]|[0-4]\\d)|1?\\d{1,2})){3}\\b" 

Tùy thuộc vào trường hợp sử dụng cụ thể bạn có thể muốn thêm neo thích hợp, tức là \A hoặc ^ ngay từ đầu và \Z hoặc $ ở cuối. Sau đó, bạn có thể xóa yêu cầu về ranh giới từ: \b.

(Hãy nhớ về việc tăng gấp đôi \ bên trong chuỗi)

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