diff --git a/frontend/src/components/MatchReportApiDialog.vue b/frontend/src/components/MatchReportApiDialog.vue index 6e04f278..3ce3cfcb 100644 --- a/frontend/src/components/MatchReportApiDialog.vue +++ b/frontend/src/components/MatchReportApiDialog.vue @@ -2375,16 +2375,15 @@ Wir wünschen den Spielen einen schönen, spannenden und fairen Verlauf und begr processScoreInput(matchIndex, setIndex) { const match = this.results[matchIndex]; - const inputValue = match.sets[setIndex]; - - if (!inputValue || inputValue.trim() === '') { + const inputValue = String(match.sets[setIndex] ?? '').trim(); + + if (!inputValue) { return; } // Validiere Eingabe: nur Zahlen, Bindestriche und Doppelpunkte - const validPattern = /^[0-9:\-]*$/; + const validPattern = /^[0-9:\-\s]*$/; if (!validPattern.test(inputValue)) { - // Entferne ungültige Zeichen const cleanedValue = inputValue.replace(/[^0-9:\-]/g, ''); match.sets[setIndex] = cleanedValue; return; @@ -2518,44 +2517,46 @@ Wir wünschen den Spielen einen schönen, spannenden und fairen Verlauf und begr parseAndValidateScore(inputValue, matchIndex, setIndex) { const match = this.results[matchIndex]; - - // Entferne Leerzeichen - const cleanedValue = inputValue.trim(); - + const cleanedValue = String(inputValue ?? '').trim(); + // Prüfe ob das Feld überhaupt bearbeitet werden darf if (this.isSetInputDisabled(matchIndex, setIndex)) { - // Wenn das Feld deaktiviert werden soll, Eingabe ignorieren return; } - + // Verschiedene Eingabeformate unterstützen: // "3:1", "3-1", "3 1", "3:1 ", "3", "-3" let homeScore, guestScore; - + if (cleanedValue.includes(':')) { - // Format: "3:1" + // Format: "3:1" (explizit mit Doppelpunkt) const parts = cleanedValue.split(':'); - homeScore = parseInt(parts[0]) || 0; - guestScore = parseInt(parts[1]) || 0; + homeScore = parseInt(parts[0], 10) || 0; + guestScore = parseInt(parts[1], 10) || 0; } else if (cleanedValue.startsWith('-')) { - // Format: "-0" bis "-X" -> "X:max(11, X+2)" - const valueStr = cleanedValue.substring(1); // Entferne das Minus - const value = parseInt(valueStr) || 0; + // Format: "-8" -> Gast gewinnt 8:11 (Heim hat 8, Gast 11) + const valueStr = cleanedValue.substring(1).trim(); + const value = parseInt(valueStr, 10) || 0; homeScore = value; guestScore = Math.max(11, value + 2); + } else if (/^\d+$/.test(cleanedValue)) { + // Nur eine positive Zahl: "8" -> Heim gewinnt 11:8 (Gast hat 8 Punkte) + const value = parseInt(cleanedValue, 10) || 0; + homeScore = Math.max(11, value + 2); + guestScore = value; } else if (cleanedValue.includes('-') && cleanedValue.split('-').length === 2) { // Format: "3-1" (zwei Teile mit Bindestrich) const parts = cleanedValue.split('-'); - homeScore = parseInt(parts[0]) || 0; - guestScore = parseInt(parts[1]) || 0; + homeScore = parseInt(parts[0], 10) || 0; + guestScore = parseInt(parts[1], 10) || 0; } else if (cleanedValue.includes(' ')) { // Format: "3 1" - const parts = cleanedValue.split(' '); - homeScore = parseInt(parts[0]) || 0; - guestScore = parseInt(parts[1]) || 0; + const parts = cleanedValue.split(/\s+/); + homeScore = parseInt(parts[0], 10) || 0; + guestScore = parseInt(parts[1], 10) || 0; } else { - // Format: "0" bis "X" -> "max(11,X+2):X" - const value = parseInt(cleanedValue) || 0; + // Fallback: wie eine einzelne Zahl behandeln + const value = parseInt(cleanedValue, 10) || 0; homeScore = Math.max(11, value + 2); guestScore = value; }