Expressions régulières en Swift : exemples pratiques pour iOS/macOS

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Expressions régulières en Swift avec exemples : en pratique



Les expressions régulières (regex) sont un outil puissant pour travailler avec des données textuelles. En Swift, la classe NSRegularExpression du framework Foundation est utilisée pour manipuler les expressions régulières. Dans cet article, nous allons analyser des exemples pratiques d'utilisation des expressions régulières en Swift pour les applications iOS et macOS : de la simple recherche à la validation complexe et au remplacement de texte.



Fondamentaux du travail avec NSRegularExpression en Swift



La classe NSRegularExpression fournit toutes les méthodes nécessaires pour travailler avec les expressions régulières. L'algorithme de base comprend trois étapes :



  1. Création d'un objet modèle d'expression régulière
  2. Application du modèle à la chaîne
  3. Traitement des résultats (correspondances, remplacements)


Création d'une expression régulière



Voici comment créer et appliquer une expression régulière très simple pour rechercher le mot "Swift" :



import Foundation

let text = "Nous apprenons Swift et le développement iOS"let pattern = "Swift"

do { let regex = try NSRegularExpression(pattern: pattern) let results = regex.matches(in: text, range: NSRange(text.startIndex..., in: text)) for match in results { if let range = Range(match.range, in: text) { print("Trouvé : \\(text[range])") } }} catch { print("Erreur dans l'expression régulière : \\(error.localizedDescription)")}


Notez la conversion de Range — c'est la méthode standard pour travailler avec les positions dans les chaînes Swift. Résultat de l'exécution : "Trouvé : Swift".



Exemple pratique 1 : Recherche d'adresses email



L'une des tâches les plus courantes est l'extraction d'adresses email à partir d'un texte. Voici un exemple qui trouvera tous les emails dans une chaîne :



import Foundation

func findEmails(in text: String) -> [String] { let pattern = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,}" var emails: [String] = [] do { let regex = try NSRegularExpression(pattern: pattern) let results = regex.matches(in: text, range: NSRange(text.startIndex..., in: text)) for match in results { if let range = Range(match.range, in: text) { emails.append(String(text[range])) } } } catch { print("Erreur : \\(error)") } return emails}

// Exemple d'utilisationlet sampleText = "Contacts : support@example.com et admin@site.org"let foundEmails = findEmails(in: sampleText)print(foundEmails) // ["support@example.com", "admin@site.org"]


Ce modèle prend en compte les caractères standard autorisés dans un email et vérifie la présence d'un point dans la partie domaine. Pour la production, on peut ajouter la prise en charge des domaines cyrilliques.



Exemple pratique 2 : Validation d'un numéro de téléphone



La validation des données saisies est une partie importante de toute application. Voici comment vérifier un numéro de téléphone russe au format +7 (XXX) XXX-XX-XX :



import Foundation

func isValidPhoneNumber(_ phone: String) -> Bool { // Modèle pour un numéro russe : +7 (XXX) XXX-XX-XX let pattern = "^\\\\+7\\\\s?\\\\(?[0-9]{3}\\\\)?\\\\s?[0-9]{3}-?[0-9]{2}-?[0-9]{2}$" do { let regex = try NSRegularExpression(pattern: pattern) let range = NSRange(location: 0, length: phone.utf16.count) return regex.firstMatch(in: phone, range: range) != nil } catch { return false }}

// Testlet validNumbers = ["+7 (495) 123-45-67", "+74951234567", "+7 495 1234567"]let invalidNumbers = ["8 (495) 123-45-67", "+7 (495) 123-45-678", "abc"]

for number in validNumbers { print("\\(number): \\(isValidPhoneNumber(number))") // true}

for number in invalidNumbers { print("\\(number): \\(isValidPhoneNumber(number))") // false}


Le modèle utilise des ancres

Blogs

Book Recommendations