Ich habe ein Problem mit einer Regex, also eigentlich zwei, und ich verstehe nicht, was da falsch läuft.
Also erstmal Pseudo gesprochen:
Ich bekomme einen Wert als String formatiert.
Dieser wird geprüft, ob er eigentlich eine fünfstellige Zahl ist.
Wenn nicht, dann soll geprüft werden, ob der Wert wenigstens nur aus Zahlen besteht.
Wenn dem so ist und er einfach nur zu kurz ist, dann soll er mit führenden Nullen aufgefüllt werden.
Wenn nicht mal das stimmt, dann soll es einen Fehler geben.
Im Code sieht das dann so aus:
Mein Problem: wenn ich den String 00010 rein gebe, dann ist der erste Match positiv und der Code überspringt das if und alles ist gut.
Gestern hatte ich den Fall, dass aber nur 010 geliefert worden ist. Also ist der erste Match false und er geht in die weiter Prüfung. Den zweiten Match hat er aber auch false geprüft. Ich habe geschaut, dass es auch wirklich Nullen sind und wenn ich den Wert manuell mit Nullen auffülle, dann ist das erste Match auch wieder true, aber ich verstehe nicht, warum er durch das zweite Match bei 010 immer durchfällt.
Also erstmal Pseudo gesprochen:
Ich bekomme einen Wert als String formatiert.
Dieser wird geprüft, ob er eigentlich eine fünfstellige Zahl ist.
Wenn nicht, dann soll geprüft werden, ob der Wert wenigstens nur aus Zahlen besteht.
Wenn dem so ist und er einfach nur zu kurz ist, dann soll er mit führenden Nullen aufgefüllt werden.
Wenn nicht mal das stimmt, dann soll es einen Fehler geben.
Im Code sieht das dann so aus:
Java:
String bestPos = line.getOrderPosition();
if(!bestPos.matches("\\d{5}")) {
if(!bestPos.matches("\\d")) {
line.addGeneralError("Positionsnmummer ist keine Nummer");
} else {
bestPos = fillUpWithZeros(bestPos, 5);
line.setOrderPosition(bestPos);
}
}
Gestern hatte ich den Fall, dass aber nur 010 geliefert worden ist. Also ist der erste Match false und er geht in die weiter Prüfung. Den zweiten Match hat er aber auch false geprüft. Ich habe geschaut, dass es auch wirklich Nullen sind und wenn ich den Wert manuell mit Nullen auffülle, dann ist das erste Match auch wieder true, aber ich verstehe nicht, warum er durch das zweite Match bei 010 immer durchfällt.