2016-04-22 8 views
2

Ich versuche, eine xml über eine xsd zu validieren. Eines der Felder ist ein optionales Feld, das einen Wert enthalten kann oder nicht. In meinem Fall die IP eines Computers. Ich überprüfe mit xsd den Ausdruck regulär, um zu überprüfen, dass es IP-Format hat, kann aber nicht validieren, wenn es leer kommt. HierRegex oder leere Zeichenfolge funktioniert nicht

ist die example

IP Zur Validierung ich folgende regex verwendet:

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

Wie Sie sehen, habe ich versucht zu verwenden (die Regex für die IP-Ausdruck) | ($) Aber es funktioniert nicht mit leeren String.

Was mache ich falsch? Wie kann ich es reparieren? Vielen Dank alle

+1

leere Zeichenfolge ist: - '^ \ s * $' – rock321987

+0

Auch versucht, und es funktioniert nicht: http://www.utilities-online.info/x sdvalidation /? save = a30e536f-4ede-41a8-8a62-6822bdc50319-xsdvalidation # .Vxo3_TCLT4Y – Mayday

Antwort

1

Es gibt einen Fehler in Ihrer Regex - die . entspricht einem beliebigen Zeichen. Sie können entweder entkommen oder in eine Zeichenklasse, z. , so dass es nur eine literale Periode (Punkt) übereinstimmen konnte. Um eine leere Zeichenfolge übereinstimmen, fügen Sie einfach den ? quantifier am Ende:

((([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])[.]){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))? 
               ^^^ (dot inside a char class)      ^- The whole pattern can match 1 or 0 times 

Siehe regex demo

Um auch leere Zeilen zu entsprechen, müssen Sie eine Alternative hinzuzufügen:

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

Siehe another regex demo

+1

Das scheint zu funktionieren, vielen Dank! – Mayday