Ich habe ein TextField in javaFX, wo sich die Hintergrundfarbe entsprechend ändert, wenn der Inhalt gültig ist oder nicht.
Gültig:
%Vor%Ungültig:
%Vor%Grundsätzlich:
Denken Sie nun eine dieser (gültigen) Zeilen als ein "Ident".
Die aktuelle Regex ist:
%Vor%Wich funktioniert bisher super, aber jetzt möchte ich csv einbeziehen. So kann ich nur eine Ident eingeben, wie ich es gewohnt bin, oder mehrere Idents getrennt durch Komma (,), aber nicht mehr als fünf Idents insgesamt.
Mein Versuch:
%Vor%Damit kann ich folgendes eingeben:
Und wenn ich mehr als 5 IDs eingib, wird es falsch ungültig. Aber wenn ich die ungültige ID eingeben 0101 9 1 1 1 1 1 1 1 1 1 wird es immer noch gültig.
Irgendwelche Vorschläge? :)
EDIT: Dies ist die passende Logik:
%Vor%Das Komma in Ihrer Regexp ist optional , dass "0101 9 1 1 1 1 1 1 1 1 1" als zwei oder mehr Datensätze frei geparst werden kann.
Um dies zu beheben, können Sie entweder genau eine ID oder mehrere durch Kommas getrennte IDs angeben:
%Vor%Ich würde auch empfehlen, base selbst strenger in Bezug auf Ihre Eingabebedingungen zu machen, obwohl es für das Problem nicht direkt relevant zu sein scheint.
Lass uns die Dinge auflösen:
Nur Ziffern:
Der reguläre Ausdruck muss Ziffern und Leerzeichen entsprechen und ^$
verwenden, um nur diesen
Erste Gruppe 4 oder 9 Ziffern:
Straigh vorwärts: \d{4}|\d{9}
Wenn die erste Gruppe 9 Ziffern - & gt; nur zwei Gruppen insgesamt
\d{9}\s\d
die 9-stellige Gruppe und die zweite
Wenn die erste Gruppe 4 Ziffern - & gt; insgesamt drei, vier oder fünf Gruppen.
\d{4}(\s\d){2,4}
die 4-stellige Gruppe gefolgt von 2 bis 4-Gruppe
Gruppiere zwei und drei Ziffern 1-9999
1-9999 - & gt; [1-9]\d{0,3}
Gruppe vier und fünf Ziffern 0-9999
Einfach eins ... \d{1,4}
Dann kombiniert alles:
%Vor%Was gibt:
%Vor%Sie können es versuchen leben hier
Hier ist eine Lösung für Ihr Problem. Ich habe die Regex ein wenig modifiziert. Ihr Muster hat auch irgendwie die letzte ungültige Aussage gültig gemacht, zumindest für mich. Das grundlegende Problem, das Sie bekommen, ist, dass Ihre Regex nicht von Klammern umgeben ist. Sie fügen also nur ,?\s
zur letzten Anweisung und nicht zur vollständigen regex-Anweisung hinzu.
Hier ist eine modifizierte Lösung, die ich gefunden habe, die alles zu validieren scheint, wie es sein sollte.
%Vor%Tags und Links java regex javafx csv validation