diff --git a/app.py b/app.py index 851b2c7..f375f2b 100644 --- a/app.py +++ b/app.py @@ -122,12 +122,10 @@ def db_to_json(): import re def validate_player_name(name): - # Only allow a-z, A-Z, 0-9, spaces, hyphens, and periods, max 50 chars - return bool(re.fullmatch(r'[a-zA-Z0-9 .-]{1,50}', name)) + return bool(re.fullmatch(r'[a-zA-Z0-9\u00C0-\u024F .-]{1,50}', name)) def validate_guest_name(name): - # Only allow a-z, A-Z, 0-9, spaces, hyphens, and periods, max 50 chars - return bool(re.fullmatch(r'[a-zA-Z0-9 .-]{1,50}', name)) + return bool(re.fullmatch(r'[a-zA-Z0-9\u00C0-\u024F .-]{1,50}', name)) def validate_date_str(date_str): # Format: DD/MM/YY @@ -252,7 +250,7 @@ def get_players(): def add_player(): data = request.json name = (data.get('name') or '').strip() - if not re.fullmatch(r'[a-zA-Z0-9 .\-]{1,50}', name): + if not re.fullmatch(r'[a-zA-Z0-9\u00C0-\u024F .\-]{1,50}', name): return jsonify({'status': 'error', 'message': 'Invalid name'}), 400 if Player.query.filter_by(name=name).first(): return jsonify({'status': 'error', 'message': 'Player already exists'}), 400 diff --git a/static/app.js b/static/app.js index 15330c2..fff5550 100644 --- a/static/app.js +++ b/static/app.js @@ -178,7 +178,7 @@ function renderTable() { guestNameInput.value = data.guestNames[date] || ''; return; } - if (!/^([a-zA-Z0-9 .-]+)$/.test(value)) { + if (!/^[a-zA-Z0-9\u00C0-\u024F .-]+$/.test(value)) { alert('Guest name can only contain letters, numbers, spaces, hyphens, and periods.'); guestNameInput.value = data.guestNames[date] || ''; return; diff --git a/templates/admin.html b/templates/admin.html index 9d183c7..dd6d82c 100644 --- a/templates/admin.html +++ b/templates/admin.html @@ -406,7 +406,7 @@ const name = nameInput.value.trim(); msg.textContent = ''; - if (!/^[a-zA-Z0-9 .\-]{1,50}$/.test(name)) { + if (!/^[a-zA-Z0-9\u00C0-\u024F .\-]{1,50}$/.test(name)) { msg.className = 'msg err'; msg.textContent = 'Invalid name. Use letters, numbers, spaces, hyphens, or periods (max 50 chars).'; return;