From 4a1d6f01f335b2b2832da577785f9de00595db26 Mon Sep 17 00:00:00 2001 From: Milen Pivchev Date: Mon, 22 Dec 2025 18:32:00 +0100 Subject: [PATCH 1/2] Use unicode regex for email validation Signed-off-by: Milen Pivchev --- iOSClient/Share/NCShare.swift | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/iOSClient/Share/NCShare.swift b/iOSClient/Share/NCShare.swift index 2551fd8558..2ee342df00 100644 --- a/iOSClient/Share/NCShare.swift +++ b/iOSClient/Share/NCShare.swift @@ -111,6 +111,7 @@ class NCShare: UIViewController, NCSharePagingContent { let isVisible = (self.navigationController?.topViewController as? NCSharePaging)?.page == .sharing networking?.readShare(showLoadingIndicator: isVisible) + searchField.searchTextField.font = .systemFont(ofSize: 14) searchField.delegate = self } @@ -201,13 +202,6 @@ class NCShare: UIViewController, NCSharePagingContent { // MARK: - IBAction @IBAction func searchFieldDidEndOnExit(textField: UITextField) { - // https://stackoverflow.com/questions/25471114/how-to-validate-an-e-mail-address-in-swift - func isValidEmail(_ email: String) -> Bool { - - let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}" - let emailPred = NSPredicate(format: "SELF MATCHES %@", emailRegEx) - return emailPred.evaluate(with: email) - } guard let searchString = textField.text, !searchString.isEmpty else { return } if searchString.contains("@"), !isValidEmail(searchString) { return } networking?.getSharees(searchString: searchString) @@ -460,15 +454,16 @@ extension NCShare: UISearchBarDelegate { } @objc private func searchSharees(_ sender: Any?) { - // https://stackoverflow.com/questions/25471114/how-to-validate-an-e-mail-address-in-swift - func isValidEmail(_ email: String) -> Bool { - - let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}" - let emailPred = NSPredicate(format: "SELF MATCHES %@", emailRegEx) - return emailPred.evaluate(with: email) - } - guard let searchString = searchField.text, !searchString.isEmpty else { return } + guard let searchString = searchField.text?.trimmingCharacters(in: .whitespacesAndNewlines), !searchString.isEmpty else { return } if searchString.contains("@"), !isValidEmail(searchString) { return } networking?.getSharees(searchString: searchString) } } + +extension NCShare { + private func isValidEmail(_ email: String) -> Bool { + let emailRegEx = "^[\u{0021}-\u{007E}\\p{L}\\p{M}\\p{N}._%+\\-]+@([\\p{L}\\p{M}\\p{N}0-9\\-]+\\.)+[\\p{L}\\p{M}]{2,64}$" // Unicode regex allows for all unicode chars, ex. ß, ü, and more. + let emailPred = NSPredicate(format: "SELF MATCHES %@", emailRegEx) + return emailPred.evaluate(with: email) + } +} From fc026497580f4d56e8a7acc2bedce98f0430ea37 Mon Sep 17 00:00:00 2001 From: Milen Pivchev Date: Mon, 22 Dec 2025 18:48:25 +0100 Subject: [PATCH 2/2] Update iOSClient/Share/NCShare.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Milen Pivchev --- iOSClient/Share/NCShare.swift | 2 -- 1 file changed, 2 deletions(-) diff --git a/iOSClient/Share/NCShare.swift b/iOSClient/Share/NCShare.swift index 2ee342df00..f6d9be59c0 100644 --- a/iOSClient/Share/NCShare.swift +++ b/iOSClient/Share/NCShare.swift @@ -110,8 +110,6 @@ class NCShare: UIViewController, NCSharePagingContent { networking = NCShareNetworking(metadata: metadata, view: self.view, delegate: self, session: session) let isVisible = (self.navigationController?.topViewController as? NCSharePaging)?.page == .sharing networking?.readShare(showLoadingIndicator: isVisible) - - searchField.searchTextField.font = .systemFont(ofSize: 14) searchField.delegate = self }