2010-06-08 6 views
6

Ich versuche, einen RegularexpressionValidator zu verwenden, um eine IP-Adresse (mit möglichen Platzhaltern) für ein IP-Filtersystem zuzuordnen.Regulärer Ausdruck zur Übereinstimmung mit IP-Adresse + Platzhalter

Ich verwende die folgende Regex:

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

der gut arbeitet, wenn es in LINQPad mit Regex.Matches läuft, aber scheint nicht zu arbeiten, wenn ich den Validator bin mit.

Hat jemand einen Vorschlag, entweder eine bessere Regex oder warum es im Test funktionieren würde, aber nicht in situ?

Cheers, Ed

+0

Können Sie einige Testfälle zur Verfügung stellen, wo es richtig passen ausfällt? – VeeArr

+0

@VeeArr Ich habe es noch nicht richtig validieren, also eine beliebige Zeichenfolge, einschließlich IP-Adressen: D –

Antwort

3

asp:RegularExpressionValidator nicht benötigen Sie einen Doppelklick Flucht Schrägstriche. Sie sollten versuchen:

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

+0

Prost Mate! :) –

1

Wie wäre es

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

Netter Vorschlag, aber ich fürchte, dass immer noch nicht validiert! –

2

[0-9] auf dem Ausdruck Start- und End-String Zeichen setzen {1,3} würde die IP-Adressen der Form 999.999.999.999 ermöglichen. Ihr IP-Adressbereich sollte nur 0-255 erlauben.
Ersetzt alle Vorkommen von [0-9] {1,3} durch ([0-9] {1,2}) | (1 [0-9] {2,2}) | (2 [0- 4] [0-9]) | (25 [0-5])
Das scheint mir sehr kompliziert zu sein, und wahrscheinlich gibt es bessere Möglichkeiten, dies zu tun, aber es scheint auf den ersten Blick korrekt zu sein.

+1

Ich bin nicht massiv über die tatsächliche IP-Adresse, die nur gültig ist, nur das Format (es ist einfacher, später zu analysieren), aber Punkt genommen. –

5

Dies: \\.|\\*\\. sieht aus wie das zwielichtige Bit. Tun Sie dies statt:

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

Und nur zu akzeptieren 0-255 (danke, 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

Noch ein guter Vorschlag, aber leider funktioniert das auch nicht! –

+0

Es tut - versuchen Sie es bei http://gskinner.com/RegExr/. Stellen Sie sicher, dass Sie ein '@' vor der Zeichenfolge haben. Wenn es immer noch nicht funktioniert, zeigen Sie uns den Code, den Sie verwenden, um es zu vergleichen. Hinweis: Ich versuche, es mit Dingen wie 192.168. *. * Und 10.. *. *. * '- ist das, was Sie wollen?Können Sie uns einige Testfälle zeigen? –

+0

Ich glaube nicht, dass Sie meine Frage richtig gelesen haben: Meine ursprüngliche Regex wird eine IPv4-Adresse mit Wildcards keine Sorgen machen, aber es wird nicht funktionieren in einem asp: RegularExpressionValidator. Ihre Regex hat genau das gleiche Problem. –

0

Meine Antwort für .NET, nicht RegularExpressionValidator -spezifische allgemein ist.

Regex-String für IP-Matching (verwenden ExplicitCapture nutzlos Capturing zu vermeiden und halten kurze RE):

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

insbesondere Anwendungsfall Je nach Sie können geeignete Anker hinzufügen, dh \A oder ^ am Anfang und \Z oder $ am Ende. Dann können Sie die Wortgrenzen-Anforderung entfernen: \b.

(Denken Sie daran, über \ innerhalb der Zeichenfolge verdoppelt)

Verwandte Themen