diff --git a/gehGassiApp/gehGassiApp/ViewModels/Messages/MessagesIosViewModel.cs b/gehGassiApp/gehGassiApp/ViewModels/Messages/MessagesIosViewModel.cs
index 7be6fb0..699066c 100644
--- a/gehGassiApp/gehGassiApp/ViewModels/Messages/MessagesIosViewModel.cs
+++ b/gehGassiApp/gehGassiApp/ViewModels/Messages/MessagesIosViewModel.cs
@@ -1,4 +1,5 @@
using System.Collections.ObjectModel;
+using System.Text.RegularExpressions;
using System.Web;
using CommunityToolkit.Maui.Core.Extensions;
using CommunityToolkit.Mvvm.ComponentModel;
@@ -28,6 +29,13 @@ namespace gehGassiApp.ViewModels.Messages
private readonly IFavouriteService _favouriteService;
private string _conversationId;
+ // Regex pattern für Telefonnummer-Erkennung
+ private static readonly Regex PhoneNumberRegex = new Regex(
+ @"(\+\d{1,4}[\s\-\(\)]*(?:\(0\)[\s\-]*)?[\d\s\-\(\)\/]{7,15})|" + // Internationale Nummern mit Ländercode
+ @"(0\d{2,5}[\s\-\/]*\d{4,12})|" + // Deutsche Festnetz-/Mobilnummern
+ @"(\d{10,15})", // Reine Zahlenketten (10-15 Ziffern)
+ RegexOptions.Compiled | RegexOptions.IgnoreCase);
+
///
/// Erstellt eine Instanz
///
@@ -50,6 +58,40 @@ namespace gehGassiApp.ViewModels.Messages
_favouriteService = favouriteService;
Title = Text.View_Title_Messages;
SelectedMenu = MenuSelected.Messages;
+
+ // PropertyChanged Event für Message registrieren
+ PropertyChanged += OnPropertyChanged;
+ }
+
+ ///
+ /// Handler für PropertyChanged Events
+ ///
+ private void OnPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
+ {
+ if (e.PropertyName == nameof(Message))
+ {
+ ValidateForPhoneNumbers(Message);
+ }
+ }
+
+ ///
+ /// Validiert den Text auf Telefonnummern
+ ///
+ /// Zu validierender Text
+ private void ValidateForPhoneNumbers(string text)
+ {
+ if (string.IsNullOrWhiteSpace(text))
+ {
+ HasPhoneNumber = false;
+ PhoneNumberErrorMessage = string.Empty;
+ return;
+ }
+
+ var hasPhone = PhoneNumberRegex.IsMatch(text);
+ HasPhoneNumber = hasPhone;
+ PhoneNumberErrorMessage = hasPhone
+ ? "Aus Sicherheitsgründen können keine Telefonnummern geteilt werden. Bitte nutzen Sie unseren integrierten Messenger."
+ : string.Empty;
}
///
@@ -84,6 +126,18 @@ namespace gehGassiApp.ViewModels.Messages
[ObservableProperty]
private string _message;
+ ///
+ /// Gibt an, ob eine Telefonnummer im Text erkannt wurde
+ ///
+ [ObservableProperty]
+ private bool _hasPhoneNumber;
+
+ ///
+ /// Fehlermeldung für Telefonnummer-Validierung
+ ///
+ [ObservableProperty]
+ private string _phoneNumberErrorMessage;
+
///
/// Wird pull to refresh ausgeführt?
///
@@ -98,7 +152,7 @@ namespace gehGassiApp.ViewModels.Messages
[RelayCommand]
public async Task Send()
{
- if (!string.IsNullOrWhiteSpace(Message))
+ if (!string.IsNullOrWhiteSpace(Message) && !HasPhoneNumber)
{
IsBusy = true;
using var cts = new CancellationTokenSource(Core.Common.Constants.CreateTimeout);
diff --git a/gehGassiApp/gehGassiApp/ViewModels/Messages/MessagesViewModel.cs b/gehGassiApp/gehGassiApp/ViewModels/Messages/MessagesViewModel.cs
index 23e686f..813648a 100644
--- a/gehGassiApp/gehGassiApp/ViewModels/Messages/MessagesViewModel.cs
+++ b/gehGassiApp/gehGassiApp/ViewModels/Messages/MessagesViewModel.cs
@@ -1,4 +1,5 @@
using System.Collections.ObjectModel;
+using System.Text.RegularExpressions;
using System.Web;
using CommunityToolkit.Maui.Core.Extensions;
using CommunityToolkit.Mvvm.ComponentModel;
@@ -30,6 +31,13 @@ namespace gehGassiApp.ViewModels.Messages
private readonly IFavouriteService _favouriteService;
private string _conversationId;
+ // Regex pattern für Telefonnummer-Erkennung
+ private static readonly Regex PhoneNumberRegex = new Regex(
+ @"(\+\d{1,4}[\s\-\(\)]*(?:\(0\)[\s\-]*)?[\d\s\-\(\)\/]{7,15})|" + // Internationale Nummern mit Ländercode
+ @"(0\d{2,5}[\s\-\/]*\d{4,12})|" + // Deutsche Festnetz-/Mobilnummern
+ @"(\d{10,15})", // Reine Zahlenketten (10-15 Ziffern)
+ RegexOptions.Compiled | RegexOptions.IgnoreCase);
+
///
/// Erstellt eine Instanz
@@ -53,6 +61,40 @@ namespace gehGassiApp.ViewModels.Messages
_favouriteService = favouriteService;
Title = Text.View_Title_Messages;
SelectedMenu = MenuSelected.Messages;
+
+ // PropertyChanged Event für Message registrieren
+ PropertyChanged += OnPropertyChanged;
+ }
+
+ ///
+ /// Handler für PropertyChanged Events
+ ///
+ private void OnPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
+ {
+ if (e.PropertyName == nameof(Message))
+ {
+ ValidateForPhoneNumbers(Message);
+ }
+ }
+
+ ///
+ /// Validiert den Text auf Telefonnummern
+ ///
+ /// Zu validierender Text
+ private void ValidateForPhoneNumbers(string text)
+ {
+ if (string.IsNullOrWhiteSpace(text))
+ {
+ HasPhoneNumber = false;
+ PhoneNumberErrorMessage = string.Empty;
+ return;
+ }
+
+ var hasPhone = PhoneNumberRegex.IsMatch(text);
+ HasPhoneNumber = hasPhone;
+ PhoneNumberErrorMessage = hasPhone
+ ? "Aus Sicherheitsgründen können keine Telefonnummern geteilt werden. Bitte nutzen Sie unseren integrierten Messenger."
+ : string.Empty;
}
///
@@ -87,6 +129,18 @@ namespace gehGassiApp.ViewModels.Messages
[ObservableProperty]
private string _message;
+ ///
+ /// Gibt an, ob eine Telefonnummer im Text erkannt wurde
+ ///
+ [ObservableProperty]
+ private bool _hasPhoneNumber;
+
+ ///
+ /// Fehlermeldung für Telefonnummer-Validierung
+ ///
+ [ObservableProperty]
+ private string _phoneNumberErrorMessage;
+
///
/// Wird pull to refresh ausgeführt?
///
@@ -101,7 +155,7 @@ namespace gehGassiApp.ViewModels.Messages
[RelayCommand]
public async Task Send()
{
- if (!string.IsNullOrWhiteSpace(Message))
+ if (!string.IsNullOrWhiteSpace(Message) && !HasPhoneNumber)
{
IsBusy = true;
using var cts = new CancellationTokenSource(Core.Common.Constants.CreateTimeout);
diff --git a/gehGassiApp/gehGassiApp/Views/Messages/MessagesIosView.xaml b/gehGassiApp/gehGassiApp/Views/Messages/MessagesIosView.xaml
index 30c14e4..f80d75e 100644
--- a/gehGassiApp/gehGassiApp/Views/Messages/MessagesIosView.xaml
+++ b/gehGassiApp/gehGassiApp/Views/Messages/MessagesIosView.xaml
@@ -17,7 +17,7 @@
-
+
+
+
+
+
diff --git a/gehGassiApp/gehGassiApp/Views/Messages/MessagesView.xaml b/gehGassiApp/gehGassiApp/Views/Messages/MessagesView.xaml
index 6578a28..5cf3ae1 100644
--- a/gehGassiApp/gehGassiApp/Views/Messages/MessagesView.xaml
+++ b/gehGassiApp/gehGassiApp/Views/Messages/MessagesView.xaml
@@ -19,7 +19,7 @@
-
+
+
+
+
+