2010-06-08 13 views
6

Próbuję użyć RegularexpressionValidator do dopasowania adresu IP (z możliwymi znakami wieloznacznymi) dla systemu filtrowania IP.Wyrażenie regularne pasujące do adresu IP + wieloznacznego

Używam następujące Regex:

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

który działa dobrze, gdy uruchomienie go w LINQPad z Regex.Matches, ale nie wydaje się działać, gdy używam walidatora.

Czy ktoś ma sugestię co do lepszego Regexa lub dlaczego działa on w teście, ale nie na miejscu?

Zdrówko, Ed

+0

można podać kilka przypadków testowych, gdzie nie jest on prawidłowo dopasować? – VeeArr

+0

@VeeArr Muszę go jeszcze poprawnie sprawdzić, więc dowolny dowolny ciąg znaków, w tym adresy IP: D –

Odpowiedz

3

asp:RegularExpressionValidator nie wymaga podwojenia-ewakuacyjnych backslashy. Należy starać:

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

+0

Pozdrawiam mate! :) –

1

Jak o wprowadzenie początku i na końcu ciągów znaków na ekspresję

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

Dobra sugestia, ale obawiam się, że nadal nie sprawdza się! –

2

[0-9] {1,3} pozwoliłoby adresy IP 999.999.999.999 formularza. Twój zakres adresów IP powinien dopuszczać tylko 0-255.
Wymień wszystkie wystąpienia [0-9] {1,3} za pomocą ([0-9] {1,2}) | (1 [0-9] {2,2}) | (2 [0- 4] [0-9]) | (25 [0-5])
Wydaje mi się to bardzo skomplikowane i prawdopodobnie istnieją lepsze sposoby na zrobienie tego, ale na pierwszy rzut oka wydaje się poprawne.

+1

Nie jestem masowo fussed o rzeczywisty adres IP jest ważny, tylko format (łatwiej jest parsować później), ale punkt wzięty. –

5

To: \\.|\\*\\. wygląda podejrzanie. Czy to w zamian:

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

i tylko do zaakceptowania 0-255 (dzięki, 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

Kolejna dobra sugestia, ale obawiam się, że to też nie działa! –

+0

Jest - wypróbuj go na http://gskinner.com/RegExr/. Upewnij się, że przed ciągiem znajduje się znak '@ '. Jeśli nadal nie działa, pokaż nam kod, którego używasz, aby go dopasować. Uwaga próbuję dopasować go do rzeczy takich jak '192.168. *. * I' 10. *. *. * '- czy tego chcesz?Czy możesz pokazać nam kilka przypadków testowych? –

+0

Nie wydaje mi się, żebyś dobrze przeczytał moje pytanie: mój oryginalny Regex będzie pasował do adresu IPv4 z symbolami wieloznacznymi bez zmartwień, ale nie będzie działał w asp: RegularExpressionValidator. Twój Regex ma dokładnie ten sam problem. –

0

Moja odpowiedź jest ogólnie NET, nie RegularExpressionValidator -specyficznych.

Regex ciąg do dopasowania IP (wykorzystać ExplicitCapture aby uniknąć niepotrzebnego przechwytywanie i zachować RE zwięzły):

"\\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" 

W zależności od konkretnego przypadku użycia może chcesz dodać odpowiednie kotwy, tj \A lub ^ na początku i \Z lub $ na końcu. Następnie możesz usunąć wymagania dotyczące granic wyrazów: \b.

(Pamiętaj o podwojenie \ wewnątrz łańcucha)

Powiązane problemy