2016-04-29 5 views
2

Ich habe eine mehrzeilige Textbox, die nur IP-Adressen akzeptieren sollte (eine pro Zeile, ohne Trennzeichen).RegularExpressionValidator Regex zum Validieren von IPs (eins pro Zeile) in einer mehrzeiligen Textbox?

Zum Beispiel:

10.1.20.1 
10.1.20.2 

Bisher hat mir die folgende Regex mit einem RegularExpressionValidator mit der Textbox zu validieren, aber es funktioniert nur, wenn eine einzelne IP-Adresse in der ersten Zeile der Textbox eingegeben wird.

Wenn in der zweiten Zeile des Textfelds eine zweite IP eingegeben wird, schlägt die Validierung des Ausdrucks fehl und die Fehlermeldung von RegularExpressionValidator wird angezeigt.

Mein Aktueller RegularExpressionValidator wird wie folgt,

<asp:RegularExpressionValidator runat="server" ErrorMessage="IP addresses (one per line) only please." ControlToValidate="TextBox1" ValidationExpression="\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]?)" /> 

Ich bin nicht nur hier für eine korrekte Regex fragen (so hilfreich wie das wäre), sondern eher eine Erklärung, die mir erlauben würde, eine schaffen Regex selbst arbeiten bitte.

Antwort

2

Es scheint, dass der gesamte Text dem Regex-Ausdruck entsprechen sollte. Ihre Regex entspricht nur einer IP als ganzes Wort. Sie müssen \b durch ^ ersetzen und eine 0+ quantifizierte Gruppe hinzufügen, die mit einer Newline + IP übereinstimmt. Hier

ein Beispiel:

^ # Start of string 
(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]?) 
(?:    # Optional - 0+ - group start 
    (?:\r\n|\r|\n) # linebreaks of various types 
    (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]?) # 0+ lines having only IP 
)* # Optional group end 
$ # End of string 

Siehe the demo

+0

Danke für die Erklärung + Antwort. Auch die Seite, die für die Demo verlinkt ist, sollte bei weiteren Regex-Problemen helfen, die ich habe! : D – user2295457

+1

Ja, was die Regex-Test-Sites betrifft, beachten Sie bitte, dass regex101.com die Patterns als PCRE/JavaScript oder Python-Regex behandelt. Wenn Sie also serverseitige komplexe Patterns verwenden möchten, die die .NET-Syntax unterstützen sollen regexstorm.net oder regexhero.net. Beachten Sie, dass die Zeilenenden unterschiedlich sind: Bei regex101.com ist der Zeilenumbruch '\ n' und auf der .NET Regex-Testseite ist es' \ r \ n' (also, wenn Sie mehrzeilige Strings testen und separat testen müssen Zeilen, '$' sollte durch '\ r? $' ersetzt werden. –

Verwandte Themen