2011-07-14 11 views
5

Robię aplikację, która używa adresu IP. Muszę potwierdzić je zacząć od co najmniej 1.0.0.1 ale z kodami poniżej akceptuje 0.0.0.0:Jak zweryfikować adres IP w C#

\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b 

Próbowałem też zmieniając go do:

\b(25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b 

Kod ten nie akceptuje 0.0.0.0, ale nie akceptuje również 100.0.0.0 do 109.0.0.0.

Czy ktoś może pomóc?

+0

Proszę dowiedzieć się, jak formatować swoje pytania poprawnie. –

+0

-1 nie wyjaśniając, że używasz regex (jeśli tak właśnie jest). Co to jest "bt"? Dlaczego formatowanie jest tak słabe? Przeczytaj to: http://stackoverflow.com/editing-help – spender

+0

Używanie Regex do tego rodzaju sprawdzania poprawności wydaje się niepotrzebnie obciążać mózg. Dlaczego nie podzielić przez '.' i sprawdzić poprawności każdej części adresu IP w bardziej konwencjonalny sposób? – spender

Odpowiedz

1

Zaoszczędź sobie bólu! Konwertuj na ciąg, podziel na znak kropki i sprawdź, czy każdy z 4 segmentów mieści się w zakresie od 0 do 1 do 255.

W przeciwnym razie, jeśli użyjesz RegexBuddy (która jest fantastyczną aplikacją dla RegEx), ma ona kilka przykładów adres IP w Bibliotece inc dla 0.0.0.0 do 255.255.255.255:

\b(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\b 
10

użytkowania

IPAddress addr = IPAddress.TryParse(str); 

Następnie, jeśli pracował uzyskać numery używając

addr.GetAddressBytes(); 

, a następnie sprawdź wartości bajtów dla poprawnych warunków, używając normalnych przypadków-if.

+2

Paź, w ten sposób, że sprawdza także 1 jako true i ustawia adres na 0.0.0.1 –

+0

Tak "1" jest prawidłowym adresem IP, co oznacza 0.0.0.1 –

+2

Yap dla eksperta sieciowego może być zrozumiałe, ale sprawdzanie poprawności w wejściowym polu tekstowym aplikacja dla nieprofesjonalnego użytkownika nie jest pożądana. –

0

Spróbuj użyć tego

ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";