feat(match-report): enhance score input validation and parsing in MatchReportApiDialog
- Improved score input handling by allowing whitespace in valid patterns and ensuring robust parsing of various score formats. - Updated logic to handle edge cases for score entry, including explicit handling of negative scores and single positive numbers. - Enhanced overall user experience by ensuring cleaner input processing and validation, maintaining data integrity during score entry.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user