Introduction
Dans ce laboratoire (lab), vous apprendrez à vérifier si une chaîne de caractères correspond à un format de numéro de téléphone en Java en utilisant les expressions régulières (Regular Expressions - Regex). Nous commencerons par créer un modèle d'expression régulière spécifiquement conçu pour correspondre aux formats de numéros de téléphone courants.
Ensuite, vous allez valider une chaîne de caractères représentant un numéro de téléphone donné par rapport au modèle d'expression régulière créé en utilisant la classe Matcher de Java. Enfin, vous explorerez comment gérer et correspondre aux différentes variantes de formats de numéros de téléphone en ajustant le modèle d'expression régulière.
Créer une expression régulière pour les numéros de téléphone
Dans cette étape, nous allons apprendre les expressions régulières (Regular Expressions - Regex) et comment en créer une pour correspondre aux numéros de téléphone. Les expressions régulières sont un outil puissant utilisé pour la correspondance de motifs dans les chaînes de caractères. C'est comme un langage spécial pour décrire les motifs de texte.
Pourquoi avons-nous besoin d'expressions régulières pour les numéros de téléphone ? Les numéros de téléphone peuvent avoir de nombreux formats (par exemple, 123-456-7890, (123) 456-7890, 123.456.7890). Les expressions régulières nous permettent de définir un motif qui correspond à toutes ces variantes.
Créons un simple programme Java qui utilise les expressions régulières pour vérifier si une chaîne de caractères ressemble à un numéro de téléphone.
Ouvrez le fichier
HelloJava.javadans l'éditeur WebIDE s'il n'est pas déjà ouvert.Remplacez tout le contenu du fichier par le code suivant :
import java.util.regex.Matcher; import java.util.regex.Pattern; public class HelloJava { public static void main(String[] args) { String phoneNumber = "123-456-7890"; // La chaîne à vérifier String regex = "\\d{3}-\\d{3}-\\d{4}"; // Le motif d'expression régulière Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(phoneNumber); boolean isMatch = matcher.matches(); if (isMatch) { System.out.println(phoneNumber + " est un format de numéro de téléphone valide."); } else { System.out.println(phoneNumber + " n'est pas un format de numéro de téléphone valide."); } } }Examinons les nouvelles parties de ce code :
import java.util.regex.Matcher;etimport java.util.regex.Pattern;: Ces lignes importent les classes nécessaires pour travailler avec les expressions régulières en Java.String phoneNumber = "123-456-7890";: C'est la chaîne que nous voulons tester.String regex = "\\d{3}-\\d{3}-\\d{4}";: C'est notre premier motif d'expression régulière. Décortiquons-le :\\d: Correspond à n'importe quel chiffre (0 - 9). Nous utilisons\\car\est un caractère spécial dans les chaînes de caractères Java, nous devons donc l'échapper.{3}: Correspond exactement 3 fois à l'élément précédent.-: Correspond littéralement au caractère tiret.- Ainsi,
\\d{3}-\\d{3}-\\d{4}correspond à trois chiffres, suivis d'un tiret, suivis de trois chiffres, suivis d'un tiret, suivis de quatre chiffres.
Pattern pattern = Pattern.compile(regex);: Cela compile la chaîne d'expression régulière en un objetPattern, qui est plus efficace pour les correspondances répétées.Matcher matcher = pattern.matcher(phoneNumber);: Cela crée un objetMatcherqui effectuera l'opération de correspondance sur notre chaînephoneNumberen utilisant lepatterncompilé.boolean isMatch = matcher.matches();: Cela tente de faire correspondre l'entière chaîne d'entrée (phoneNumber) au motif. Il renvoietruesi l'ensemble de la chaîne correspond, etfalsesinon.- Le bloc
ifetelseaffiche simplement un message en fonction de si la chaîne correspond au motif.
Enregistrez le fichier (Ctrl+S ou Cmd+S).
Compilez le programme dans le terminal :
javac HelloJava.javaS'il n'y a pas d'erreurs, un fichier
HelloJava.classsera créé.Exécutez le programme compilé :
java HelloJavaVous devriez voir la sortie indiquant que "123-456-7890" est un format de numéro de téléphone valide selon notre simple expression régulière.
Dans cette étape, vous avez appris les bases de l'utilisation des expressions régulières en Java et créé un simple motif pour correspondre à un format de numéro de téléphone spécifique. Dans les étapes suivantes, nous allons rendre notre expression régulière plus flexible pour gérer différents formats.
Valider un numéro de téléphone avec Matcher
Dans l'étape précédente, nous avons créé un simple motif d'expression régulière et utilisé la méthode matches() de la classe Matcher pour vérifier si une chaîne entière correspondait au motif. Dans cette étape, nous allons explorer plus en détail la classe Matcher et voir comment elle fonctionne.
La classe Matcher est le moteur qui effectue les opérations de correspondance. Elle est créée à partir d'un objet Pattern et est utilisée pour trouver les occurrences du motif dans une chaîne d'entrée.
Modifions notre programme pour tester une chaîne différente et voir comment se comporte la méthode matches().
Ouvrez le fichier
HelloJava.javadans l'éditeur WebIDE.Changez la chaîne
phoneNumberpour quelque chose qui ne correspond pas exactement à notre motif actuel\\d{3}-\\d{3}-\\d{4}. Par exemple, changez la ligne :String phoneNumber = "123-456-7890"; // The string to checken :
String phoneNumber = "My phone number is 123-456-7890."; // The string to checkEnregistrez le fichier (Ctrl+S ou Cmd+S).
Compilez le programme modifié dans le terminal :
javac HelloJava.javaExécutez le programme compilé :
java HelloJavaCette fois, la sortie devrait être :
My phone number is 123-456-7890. is not a valid phone number format.Pourquoi cela s'est-il produit ? Parce que la méthode
matches()tente de faire correspondre l'entière chaîne d'entrée au motif. Étant donné que notre chaîne d'entrée contient plus que simplement le motif de numéro de téléphone,matches()renvoiefalse.Si nous voulions savoir si le motif existe n'importe où dans la chaîne, nous utiliserions une méthode différente, comme
find(), que nous explorerons plus tard. Pour l'instant, nous nous concentrons sur la validation de savoir si l'entière chaîne correspond à un format spécifique en utilisantmatches().Comprendre la différence entre
matches()etfind()est crucial lorsque vous travaillez avec les expressions régulières en Java.matches()est utilisé pour une validation stricte de l'ensemble de la chaîne, tandis quefind()est utilisé pour rechercher le motif dans une chaîne plus longue.
Dans cette étape, vous avez vu comment fonctionne la méthode matches() de la classe Matcher et pourquoi il est important de comprendre son comportement lors de la validation des formats de chaînes.
Gérer différents formats de numéros de téléphone
Dans le monde réel, les numéros de téléphone ne suivent pas toujours exactement le format XXX-XXX-XXXX. Ils peuvent utiliser des points (.), des espaces (``) ou même des parenthèses (()). Dans cette étape, nous allons modifier notre motif d'expression régulière pour gérer certaines de ces variantes.
Nous allons introduire quelques concepts supplémentaires d'expressions régulières pour rendre notre motif plus flexible :
?: Rend l'élément précédent facultatif (0 ou 1 fois).*: Correspond à l'élément précédent zéro fois ou plus.+: Correspond à l'élément précédent une fois ou plus.[]: Définit un ensemble de caractères. Correspond à n'importe quel caractère unique contenu entre les crochets.|: Agit comme un opérateur OU. Correspond soit au motif avant, soit au motif après le|.
Mettons à jour notre fichier HelloJava.java pour utiliser un motif d'expression régulière plus flexible.
Ouvrez le fichier
HelloJava.javadans l'éditeur WebIDE.Changez la chaîne
regexcomme suit :String regex = "\\(?\\d{3}\\)?[-.\\s]?\\d{3}[-.\\s]?\\d{4}"; // More flexible regex patternDécortiquons ce nouveau motif :
\\(?: Correspond à une parenthèse ouvrante facultative(. Nous avons besoin de\\pour échapper la signification spéciale de(dans les expressions régulières, et?la rend facultative.\\d{3}: Correspond exactement à trois chiffres.\\)?: Correspond à une parenthèse fermante facultative).[-.\\s]?: C'est un ensemble de caractères[]qui correspond soit à un tiret (-), à un point (.), soit à un caractère d'espace blanc (\\s). Le?rend ce séparateur facultatif.\\d{3}: Correspond exactement à trois chiffres.[-.\\s]?: Correspond de nouveau à un séparateur facultatif (tiret, point ou espace blanc).\\d{4}: Correspond exactement à quatre chiffres.
Ce motif peut maintenant correspondre à des formats tels que
123-456-7890,(123) 456-7890,123.456.7890,123 456 7890et même1234567890(sans aucun séparateur).Maintenant, testons ce nouveau motif avec différents formats de numéros de téléphone. Remplacez la chaîne
phoneNumberpar quelques exemples différents :import java.util.regex.Matcher; import java.util.regex.Pattern; public class HelloJava { public static void main(String[] args) { String[] phoneNumbers = { "123-456-7890", "(123) 456-7890", "123.456.7890", "123 456 7890", "1234567890", "invalid-number", // This should not match "123-456-789" // This should not match }; String regex = "\\(?\\d{3}\\)?[-.\\s]?\\d{3}[-.\\s]?\\d{4}"; // More flexible regex pattern Pattern pattern = Pattern.compile(regex); for (String phoneNumber : phoneNumbers) { Matcher matcher = pattern.matcher(phoneNumber); boolean isMatch = matcher.matches(); if (isMatch) { System.out.println(phoneNumber + " is a valid phone number format."); } else { System.out.println(phoneNumber + " is not a valid phone number format."); } } } }Nous avons introduit un tableau de chaînes
phoneNumberspour tester facilement plusieurs entrées et une boucleforpour les parcourir.Enregistrez le fichier (Ctrl+S ou Cmd+S).
Compilez le programme dans le terminal :
javac HelloJava.javaExécutez le programme compilé :
java HelloJavaVous devriez voir une sortie similaire à celle-ci, indiquant quelles chaînes correspondent au motif :
123-456-7890 is a valid phone number format. (123) 456-7890 is a valid phone number format. 123.456.7890 is a valid phone number format. 123 456 7890 is a valid phone number format. 1234567890 is a valid phone number format. invalid-number is not a valid phone number format. 123-456-789 is not a valid phone number format.
Vous avez maintenant créé un motif d'expression régulière plus robuste qui peut gérer plusieurs formats de numéros de téléphone courants. Cela démontre la puissance et la flexibilité des expressions régulières pour valider et analyser les chaînes de caractères.
Résumé
Dans ce laboratoire, nous avons appris à vérifier si une chaîne de caractères correspond à un format de numéro de téléphone en Java en utilisant les expressions régulières (Regex). Nous avons commencé par comprendre le concept des expressions régulières et leur importance pour la correspondance de motifs, en particulier pour gérer différents formats de numéros de téléphone. Nous avons ensuite créé un simple programme Java utilisant le package java.util.regex.
La première étape a consisté à créer un motif d'expression régulière de base \\d{3}-\\d{3}-\\d{4} pour correspondre au format "XXX-XXX-XXXX". Nous avons utilisé Pattern.compile() pour compiler l'expression régulière en un objet Pattern et Pattern.matcher() pour créer un objet Matcher pour la chaîne d'entrée. Enfin, nous avons utilisé matcher.matches() pour vérifier si l'ensemble de la chaîne correspondait au motif et avons imprimé le résultat. Cela a jeté les bases de la validation des numéros de téléphone à l'aide d'expressions régulières en Java.



