Autor Beitrag
jg72
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 22



BeitragVerfasst: Do 15.03.18 09:29 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 3832
Erhaltene Danke: 781

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: 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.
jg72 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 22



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 165
Erhaltene Danke: 29



BeitragVerfasst: 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.

wiki.freepascal.org/Plex_and_Pyacc

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

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

Gruß
Tankard


Zuletzt bearbeitet von Tankard am Do 15.03.18 14:38, insgesamt 1-mal bearbeitet
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4290
Erhaltene Danke: 863


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 22



BeitragVerfasst: 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