Entwickler-Ecke

Basistechnologien - Testen ob String zum Anfang eines regulären Ausdrucks passt


jg72 - Do 15.03.18 09:29
Titel: Testen ob String zum Anfang eines regulären Ausdrucks passt
Hallo Zusammen,

ich habe hier mehrere nicht so komplizierte reguläre Ausdrücke, welche auch soweit funktionieren, z.B. "[0-9]{2}-[0-9]{4}-[A-Z]{4}", welcher dann z.B. zu "12-3456-ABCD" passen würde.

Nun muss ich bei Benutzereingaben testen, ob der Anfang der eingegebenen Zeichenfolge zu dem regulären Ausdruck passt. Ich könnte jetzt also für jeden regulären Ausdruck einen Unterausdruck "Passt zur Eingabelänge n" machen, aber dass ist mir zu umständlich und fehleranfällig.

Gibt es also so etwas dass mir bei der Eingabe von z.B. "12-345" sagen könnte, ja diese Zeichen passen schonmal?

Ich hoffe, ich habe mich klar genug ausgedrückt :-)

Viele Grüße


Th69 - Do 15.03.18 11:33

Warum soll denn eine Teileingabe schon als valides Ergebnis angesehen werden? Was, wenn der Benutzer die Daten nicht von links nach rechts eingibt?

Welche UI verwendest du denn? Bei WinForms wären es z.B. das Validating-Ereignis sowie eine MaskedTextBox, s. User Input Validation in Windows Forms [https://docs.microsoft.com/en-us/dotnet/framework/winforms/user-input-validation-in-windows-forms].


jg72 - Do 15.03.18 13:52

Also, wir haben hier im System eine Hand voll Felder, welche nach einem bestimmten Muster aufgebaut sind. Die Benutzer verwenden diese Felder sehr häufig als Suchkriterium, dabei reicht es dann meist, dass der Anfang eingegeben wird um eine überschaubare Ergebnismenge zu erhalten.

Ich könnte nun einfach überprüfen, ob die Länge der eingegebenen Zeichenkette kleiner als (in dem Beispiel) 12 Zeichen ist und dann mit einem Like in der DB suchen, ich wollte es aber noch ein bisschen intelligenter gestalten und ungültige Eingaben (z.B. "Hallo") direkt abweisen. Auch kann man schon nach wenigen eingegebenen Zeichen erkennen, welches Muster gemeint ist und da könnte man an vielen Stellen ein Eingabefeld für alle Möglichkeiten verwenden und das Programm kann auch bei unvollständiger Eingabe erkennen, welches Feld gemeint ist. Bedingung ist halt immer, dass am Ende etwas weggelassen wird, nicht am Anfang oder in der Mitte. Das brauchen die Mitarbeiter nicht.

Die UI sollte egal sein.


Tankard - Do 15.03.18 14:27

Hallo,
ich nehme mal an du suchst sowas wie LEX und YACC. Die Pascal äquivalenten heißen Plex und Pyacc.

http://wiki.freepascal.org/Plex_and_Pyacc

Für C# wie ich gerade sehe gibt es: gplex und gppg

https://archive.codeplex.com/?p=gplex
https://archive.codeplex.com/?p=gppg

Gruß
Tankard


Ralf Jansen - Do 15.03.18 14:35

Der Regex sieht so aus als hätte ein gültiges Ergebnis immer eine fixe Länge.
In dem Fall könntest du die Eingabe, nur für den Test, auf die Ziellänge hin mit einer gültigen Zeichenfolge auffüllen und dann per Regex prüfen.
Du definierst also ein gültiges Muster als Vorlage z.B. 99-9999-AAAA und füllst dann die fehlenden Zeichen in der Eingabe mit den Bestandtteilen aus deinem per Definition gültigen Muster auf.
Die Eingabe 12-345 würdest du also zu 12-3459-AAAA ergänzen und das dann prüfen.


jg72 - Do 15.03.18 14:38

Und es hat Klick gemacht. Auf die Idee mit dem Ergänzen hätte ich auch wirklich selbst kommen können.

Vielen Dank