Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   String gegen XSD-Vorgabe prüfen (https://www.delphipraxis.net/194603-string-gegen-xsd-vorgabe-pruefen.html)

sko1 12. Dez 2017 11:01

String gegen XSD-Vorgabe prüfen
 
Hallo,

ich habe etliches inzwischen gelesen, komme aber irgendwie zu keiner (einfachen) Lösung:

Ich habe einen x-beliebigen String, der gegen ein Format aus einer XSD-Datei auf Gültigkeit geprüft werden soll.

z.B.
passt '1234567 D4321Ax' zu folgender Vorgabe :
<xsd:pattern value="[a-zA-Z0-9$&amp;%\*\+\-/]{1,12}" />

Gibt es da irgend etwas was fertiges was ohne zusätzliche DLL's auskommt, die auf dem Rechner des Anwenders eventuell gar nicht oder veraltet vorliegen, also reiner Delphi-Code?

Ciao
Stefan

Delphi.Narium 12. Dez 2017 11:46

AW: String gegen XSD-Vorgabe prüfen
 
Das sieht mir nach 'nem regulären Ausdruck aus: http://docwiki.embarcadero.com/RADSt...Ausdr%C3%BCcke

Das sollte mit Delphimitteln gehen: Zeichenfolge gegen den regulären Ausdruck aus value prüfen.

sko1 12. Dez 2017 13:21

AW: String gegen XSD-Vorgabe prüfen
 
das verlinkte Beispiel funktioniert leider nicht!

Da kann ich "12345 6789" eingeben und es wird als gültig erkannt obwohl in diesem Beispiel "[a-zA-Z0-9$&amp;%\*\+\-/]{1,12}" Leerzeichen verboten sind.

Ebenso wird die Längenangabe ignoriert, ein "1234567890123456789" wird ebenfalls als gültig erkannt!

Ciao
Stefan

himitsu 12. Dez 2017 13:31

AW: String gegen XSD-Vorgabe prüfen
 
Zitat:

Zitat von sko1 (Beitrag 1388571)
und es wird als gültig erkannt obwohl in diesem Beispiel "[a-zA-Z0-9$&%\*\+\-/]{1,12}" Leerzeichen verboten sind.

Weil es auch gültig ist. :zwinker:

Zitat:

Ebenso wird die Längenangabe ignoriert
Nein wird sie nicht. In diesem String gibt es mindestens einmal ein paar Zeichen, welche deinem Suchmuster entsprechen.
https://regex101.com/r/giS6xE/1


Du prüfst nur ob in dem String etwas mit der Maske übereinstimmt und nicht ob es der ganze String ist.
In diesem Fall kannst du ganz einfach ^ vor und $ hinter das Suchmuster einfügen, also "^[a-zA-Z0-9$&%\*\+\-/]{1,12}$" .

sko1 12. Dez 2017 13:56

AW: String gegen XSD-Vorgabe prüfen
 
Danke, danke, danke!

Genau so ist es und funktioniert jetzt!

Ciao
Stefan

Delphi.Narium 12. Dez 2017 14:07

AW: String gegen XSD-Vorgabe prüfen
 
Muss der reguläre Ausdruck im Programm bei der Ausführung tatsächlich ^[a-zA-Z0-9$&amp;%\*\+\-/]{1,12}$ sein oder nicht eher ^[a-zA-Z0-9$&%\*\+\-/]{1,12}$?

himitsu 12. Dez 2017 14:15

AW: String gegen XSD-Vorgabe prüfen
 
im RegEx-Ausdruck natürlich nur &
das Andere ist die Codierung in der XSD (XML), da & dort ja ein Steuerzeichen ist.

Wenn du diesen String aber mit einer XML-Komponente ausliest, dann decodiert sie es automatisch.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz