Preg correspond à n'importe quel personnage. PHP (expression régulière) - qu'est-ce que c'est ? Exemples et tests d'expressions régulières

Commençons par ce qu'est une expression régulière. Alors répondez-moi à cette question : y a-t-il un « e » dans le mot « test » ? "Manger!" vous dites. Ensuite je vous pose une deuxième question, comment avez-vous trouvé la lettre « e » dans le mot « test » ? La réponse est évidente, nous prenons le premier caractère, c'est-à-dire « t » et le comparons avec ce que nous recherchons, c'est-à-dire avec « e ». S'ils ne sont pas égaux, alors nous prenons le deuxième caractère, c'est-à-dire « e », et le comparons avec ce que nous recherchons, c'est-à-dire « e ». Voilà ! Une correspondance a été trouvée. Réponse : Le mot « test » contient la lettre « e ».

Maintenant, répondez-moi encore à une question : où est l'expression régulière dans cet exemple ? J'espère que vous avez deviné que l'expression régulière ici est ce que nous recherchons dans le mot « test ». Autrement dit, la lettre « e » dans cet exemple est une expression régulière.

A quoi servent les expressions régulières en PHP ? Dans ma pratique, les expressions régulières étaient utilisées, par exemple, pour déterminer si une adresse e-mail était correctement composée. De telles expressions sont également utilisées pour déterminer l'exactitude du nom d'utilisateur et du mot de passe. À l'aide d'expressions régulières, vous pouvez rechercher l'adresse dans un lien et l'enregistrer. Il y a beaucoup de choses que vous pouvez faire. En analysant cela, vous pouvez identifier la fonction principale des expressions régulières, ainsi que deux fonctions secondaires. Fonction principale, il s'agit d'une recherche de correspondances dans une chaîne. Les effets secondaires incluent la sauvegarde des correspondances trouvées et leur remplacement.

Première expression régulière

En théorie, nous comprenons comment trouver le caractère « e » dans le mot « test », mais comment cela est-il mis en œuvre en pratique ? Pour utiliser des expressions régulières en php, les fonctions suivantes sont généralement utilisées :

preg_match("expression régulière (modèle)", "variable dans laquelle la recherche est effectuée", "Variable dans laquelle le résultat de la recherche est enregistré (paramètre facultatif)"); - Fonction de correspondance
preg_replace("expression régulière (modèle)", "Par quoi remplacer la correspondance trouvée", "variable dans laquelle le remplacement est effectué"); - Remplacer la fonction

Commençons par utiliser ces fonctions. Voici un exemple de recherche du caractère « e » dans le mot « test » :

$a = "tester" ;
if(preg_match("/e/",$a)) echo "trouvé !!";

Le code décrit la condition : si quelque chose correspondant au modèle est trouvé dans la variable $a, alors affichez le message « trouvé !! » Comme vous l'avez peut-être remarqué, notre template est situé entre deux "/". Dans ce cas, le symbole "/" symbolise le début et la fin de notre modèle. J'espère que c'est clair.

Tout cela est intéressant, bien sûr... mais notre modèle est très simple, vous ne trouvez pas ? Après tout, nous avons rarement besoin de trouver un symbole dans une variable. Dans la plupart des cas, nous devons trouver de nombreux personnages, mais aussi des inconnus. Comment être? Posons-nous un problème et essayons de le résoudre. Supposons que nous ayons une chaîne composée de chiffres et d'une lettre anglaise inconnue

Comment retrouver cette lettre ? Il pourrait y avoir n’importe quelle lettre de l’alphabet anglais, alors comment l’identifier ? Vous avez vous-même répondu à votre question, il existe n'importe quelle lettre, c'est-à-dire qu'elle est comprise entre a et z. Vous pouvez utiliser des plages dans les expressions régulières. Si nous ne savons pas quel caractère nous recherchons, mais que nous savons avec certitude que ce caractère est une lettre de l'alphabet anglais, alors l'entrée sera la suivante :

$a = "123a321" ;
if(preg_match("//",$a)) echo "trouvé !!";

Notez que la plage est entourée de crochets "[" "]". Tout ce qui est entre parenthèses est défini comme un symbole, dans ce cas le symbole va de a à z. Si nous devons trouver non pas une lettre, mais un chiffre, alors l'entrée ressemblera à ceci :

$a = "abc1cba" ;
if(preg_match("//",$a)) echo "trouvé !!";

Je tiens également à noter que les expressions régulières sont sensibles à la casse, donc les caractères « A » et « a » sont complètement différents, pour rechercher les deux caractères, écrivez comme ceci :

$a = "123a321" ;
if(preg_match("//",$a)) echo "trouvé !!";

Il existe également une recherche de lettres russes, effectuée de la même manière qu'avec les lettres anglaises :

$a = "123×321" ;
if(preg_match("/[a-zA-Z]/",$a)) echo "found !!";

Métacaractères

Nous avons appris à rechercher un caractère inconnu dans une chaîne. Que faire si l'on a besoin de retrouver plusieurs personnages ? Les soi-disant métasymboles viennent à la rescousse... Supposons que nous ayons une chaîne avec des chiffres et des lettres, comment pouvons-nous la décrire dans le modèle ? Tu peux le faire:

ligne - 123a321
échantillon -

Hmm... le modèle correspond en fait à notre chaîne, et une fois vérifié pour sa conformité, il donnera la vérité tant attendue ! Mais c’est un disque plutôt encombrant, vous ne trouvez pas ?

Voici comment le raccourcir :

ligne - 123a321
échantillon - *

Il me semble que c'est plus court. C'est quoi le symbole "*" ? Il s'agit du même métasymbole, cela signifie que le symbole que nous avons décrit (à savoir un symbole pouvant contenir des chiffres de 0 à 9 ou des lettres de l'alphabet anglais, de a à z) peut être répété indéfiniment, ou plus d'une fois. Oui oui! Ce métasymbole trouvera une correspondance dans une variable vide, puisque même l'absence du symbole que nous avons décrit retournera vrai ! Souviens-toi de ça

Quels autres métacaractères existe-t-il ?

Par exemple, le métacaractère "+" Il est presque similaire au métacaractère "*" à une petite exception près. "*" renverra vrai même s'il n'y a aucun caractère, et "+" vérifiera la présence d'au moins un caractère. Autrement dit, si une ligne nécessite la présence le minimum un caractère puis utilisez "+" au lieu de "*"

Le métacaractère « ? » est également souvent utilisé. Cela signifie que la ligne ne doit pas contenir plus d'un caractère souhaité. Permettez-moi de donner quelques exemples pour les deux derniers métacaractères que j'ai décrits.

Supposons que nous devions vérifier l'exactitude du mot de passe de l'utilisateur. Réfléchissons à ce que doit contenir le mot de passe utilisateur ? Eh bien, premièrement, il doit s'agir d'au moins un personnage. Deuxièmement, elle ne doit contenir que des chiffres et des lettres de l'alphabet anglais, donc l'expression régulière ressemblera à ceci :

$a = "qwerty12345" ;

Quels personnages autorisons-nous ? Lettres anglaises de tous cas et chiffres. Essayez maintenant de laisser une ligne vide au lieu du mot de passe.

$a = "" ;
if(preg_match("/+/",$a)) echo "Le mot de passe est correct";

Vous ne verrez pas le message « Le mot de passe est correct ». Pourquoi? Parce que le métacaractère "+" vérifiait la chaîne pour voir si elle contenait au moins un caractère.

Et maintenant, un petit truc, regardons notre expression, nous n'avons pas laissé, eh bien, disons, un espace dedans, n'est-ce pas ? mettez un espace à la fin du mot de passe et exécutez

$a = "qwerty12345" ;
if(preg_match("/+/",$a)) echo "Le mot de passe est correct";

Et pourquoi voyons-nous notre message concernant le mot de passe correct ? C'est assez simple... Function preg_match(); arrête sa vérification au premier match. Autrement dit, le symbole « q » correspond au modèle que nous avons décrit et tout le reste n'est plus important pour la fonction. Que devons-nous faire ? Voici comment résoudre ce problème :

$a = "qwerty12345" ;
if(preg_match("/^+$/",$a)) echo "Le mot de passe est correct";

En ajoutant un "^" au début d'une expression et un "$" à la fin, nous indiquons à la fonction à quoi le modèle doit correspondre tous doubler. Si vous exécutez ce code, vous ne verrez pas le message car il y a un caractère illégal à la fin du mot de passe - un espace

Remplacez maintenant le métacaractère "+" par le métacaractère "?". Que penses-tu qu'il va se passer? Correctement, il n'y aura aucun message concernant l'exactitude du mot de passe, car le mot de passe contient plus d'un caractère. J'espère avoir bien expliqué le travail de ces trois métacaractères fréquemment utilisés

Parfois, "pas" est mieux

Nous avons au moins appris à vérifier que le mot de passe est correct, et c'est tant mieux ! Laissez-moi vous parler d'une autre façon de rechercher quelque chose dans une chaîne. Disons que nous devons vérifier l'absence de nombres dans une chaîne. Comment faire? Voici la ligne :

(J'y ai spécifiquement introduit ces symboles "-_+()" pour que la vie ne ressemble pas à du miel...) On pourrait formuler l’expression suivante :

Mais il faut l’avouer, on ne sait pas toujours quels caractères sont utilisés dans une ligne, mais on sait avec certitude qu’il ne doit pas y avoir de chiffres dedans ! Il serait donc plus logique d'écrire simplement un modèle qui sauterait les lignes dans lesquelles Non nombres, et non ceux dans lesquels il y a "Oh mon Dieu, combien de symboles incompréhensibles !!!". Voici un exemple d'expression correctement composée pour de tels problèmes :

$a = "a-_+()";
if(preg_match("/^[^0-9]+$/",$a)) echo "Aucun numéro !";

Comment y sommes-nous parvenus ? Nous avons entré le symbole Mais! le majuscule "^" ([^0-9]) placé au début indique qu'il y aura je ne devrais pas J'espère que cela a été réglé

Eh bien, terminons-le lentement... Je vais donner deux exemples avec des explications, au cours desquels nous apprendrons comment enregistrer le résultat de la recherche dans une variable et comment vérifier l'exactitude de l'adresse postale.

Je l'ai vu et je l'ai sauvegardé !

Mon blog

$a = " Mon blog";
preg_match("/ /", $a);

Dans notre expression régulière, nous avons décrit tous les caractères possibles pouvant être inclus dans un lien. Je veux aussi faire attention aux guillemets et aux caractères « / » dans notre expression, ils sont précédés d'un antislash, à quoi ça sert ? Le fait est que "/" et les guillemets sont eux-mêmes des caractères spéciaux. Et pour que le modèle les perçoive comme des symboles ordinaires, nous devons les filtrer. L'échappement se fait en ajoutant une barre oblique inverse avant les caractères spéciaux. j'espère que c'est clair

$a = " Mon blog";
preg_match("/ /", $a, $b);

Eh bien, en conséquence, il est nécessaire d'ajouter un paramètre supplémentaire sous la forme d'une variable $b, dans laquelle le lien trouvé sera stocké. Vous devez également savoir que le résultat de la recherche est placé dans un tableau. La variable $b est donc un tableau. L'information que nous recherchons se trouve sous l'index 1. Cela signifie que le résultat de la recherche se trouve dans la variable $b. Affichons le résultat à l'écran :

$a = " Mon blog";
preg_match("/ /", $a, $b);
écho $b;

La bonne adresse est la clé du succès !

Et enfin, la réponse à la question, l’e-mail est-il correct ? Tout d’abord, vous devez savoir quels caractères sont autorisés dans les adresses ? Pour autant que je sache, les caractères autorisés incluent :

  • Lettres anglaises, chiffres, « _ », « - » euh, tout semble être... Nous partirons de là.
  • Ensuite, nous avons "@"
  • Après, lettres anglaises
  • Prochaine période
  • Et encore des lettres anglaises...

L'expression régulière sera donc la suivante :

$a = " [email protégé]";
if(preg_match("/^+@+.+$/", $a)) echo "l'adresse e-mail est correcte !";
else echo "l'adresse e-mail n'est PAS écrite correctement !";

Eh bien... J'espère que de tels enregistrements ne vous effraient pas maintenant et que vous pouvez tout à fait les comprendre.

Enfin, je veux dire quelque chose. L'article s'est avéré fastidieux et, en même temps, ne couvrait qu'une partie des possibilités. Si vous lisez cette phrase, c'est probablement que vous l'avez lu jusqu'au bout, ce pour quoi je vous remercie beaucoup.

Concernant la série d'articles sur le développement d'un blog cms, la première partie de la série Je le déclare fermé ! Dans un avenir proche, nous commencerons à implémenter le panneau d'administration, alors ne « changez pas ». Si vous avez des questions, je me ferai un plaisir d'y répondre. Bonne chance à vous, c'est tout ce que j'ai !

Les expressions régulières sont un outil de traitement de chaînes très puissant, mais en même temps difficile à comprendre. Je vais en décrire les principaux points. Une expression régulière est un modèle de chaîne. À l'aide de ce modèle, vous pouvez rechercher des occurrences, effectuer des remplacements et vérifier la conformité avec le modèle.

Règles pour créer un modèle

Les limites du modèle doivent être indiquées par certains symboles, utilisant souvent " / ", mais je préfère utiliser " # " parce que l'abondance de barres obliques avant/arrière peut éblouir vos yeux et que les marques de hachage ne sont généralement utilisées nulle part ailleurs. Donc : " #IciBodyRegularExpression#"

À l'intérieur expression régulière des parenthèses sont utilisées - ce sont des sous-expressions qui peuvent être manipulées, par exemple :

#^/catalogue/(+)/(+)\.html.*#

Cette expression est conçue pour obtenir les paramètres dans une chaîne URL. Au début de la ligne il y a un caractère spécial " ^ " - cela signifie le début de la ligne. Vient ensuite " /catalogue/" - il n'y a pas de caractères spéciaux ici, c'est juste du texte qui doit être contenu dans la ligne. Ensuite, nous avons rencontré des parenthèses, c'est-à-dire que nous avons atteint la première sous-expression. Les crochets indiquent de nombreux caractères qui peuvent être dans la ligne à cet endroit. Le signe " - " signifie énumération. Signe " \ " échappe aux caractères spéciaux. Ainsi, dans la première sous-expression on peut avoir des MAJUSCULES et des minuscules de l'alphabet latin, des chiffres de 0 à 9, un trait de soulignement, un tiret et un point. Un tiret et un point sont des caractères spéciaux, mais ici ils sont échappés, donc ici ce ne sont que des symboles. Après les crochets, il y a un " + " - cela signifie que le caractère précédent (et pour nous il s'agit d'un ensemble de caractères spécifiés entre crochets) peut apparaître 1 ou plusieurs fois. Vient ensuite " / " est juste un symbole, et une deuxième sous-expression similaire. Vient ensuite " \.html"Qu'est-ce que le texte signifie" .html". Et puis les caractères spéciaux " .* "Un point signifie n'importe quel caractère et un astérisque signifie n'importe quelle quantité du caractère précédent. C'est-à-dire après " .html"Tout peut aller.

Indication de quantité, quantificateurs

Ci-dessus, nous avons déjà considéré de tels symboles indiquant le nombre de symboles précédents, tels que + Et * . Voici toutes les possibilités pour préciser la quantité :

Caractères spéciaux

Il existe des abréviations spéciales pour certains groupes de caractères :

"Avidité"

Examinons le concept de cupidité des expressions régulières. Par exemple il y a une ligne :

#()#

On lit : sous-expression :

Tout semble correct, la sous-expression correspond :

Mais cela convient aussi :

C'est ce que nous obtiendrons, parce que... Les expressions régulières sont gourmandes par défaut. Vous pouvez supprimer la cupidité en utilisant le modificateur " U", comme ça:

#()#U

Modificateurs

Une expression régulière peut être suivie de modificateurs : " #HereBodyRegularExpression#HereModifiers"Types de modificateurs :

je Active le mode insensible à la casse, c'est-à-dire les majuscules et les minuscules dans l'expression ne diffèrent pas.
m Indique que le texte recherché doit être traité comme composé de plusieurs lignes. Par défaut, le moteur d'expressions régulières traite le texte comme une seule chaîne, quelle que soit sa nature réelle. En conséquence, les métacaractères "^" et "$" indiquer le début et la fin de tout le texte. Si ce modificateur est spécifié, alors ils indiqueront respectivement le début et la fin de chaque ligne de texte.
s Le métacaractère par défaut est " . " n'inclut pas de caractère de nouvelle ligne dans sa définition. La spécification de ce modificateur supprime cette restriction.
U Supprime la cupidité des expressions régulières
toi Permet de travailler avec des expressions régulières Cyrillique vers UTF-8, sinon cela ne fonctionne pas correctement.

php Fonctions pour travailler avec des expressions régulières

preg_replace

Rechercher et remplacer :

Preg_replace (mixte $pattern , mixte $replacement , mixte $subject [, int $limit = -1 [, int &$count ]]);

Chaque valeur peut être une chaîne ou un tableau, au cas où $sujet array - un tableau est renvoyé, sinon une chaîne

preg_split

Divise une chaîne à l'aide d'une expression régulière :

Preg_split (string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]]);

Renvoie un tableau composé de sous-chaînes de la chaîne donnée sujet, qui est divisé le long de frontières correspondant au motif modèle.

Lorsqu'ils travaillent avec des textes dans n'importe quel langage de programmation moderne, les développeurs sont constamment confrontés aux tâches consistant à vérifier la conformité des données saisies avec le modèle souhaité, à rechercher et à remplacer des fragments de test et à d'autres opérations typiques de traitement des informations symboliques. Développer vos propres algorithmes de vérification entraîne une perte de temps, une incompatibilité du code du programme et une complexité dans son développement et sa modernisation.

Le développement rapide des langages de développement Internet et WEB a nécessité la création d'outils universels et compacts pour traiter les informations textuelles avec un minimum de code requis pour cela. Le langage PHP, populaire auprès des développeurs débutants et professionnels, ne fait pas exception. L'expression régulière en tant que langage de modèle de texte vous permet de simplifier les tâches de traitement de texte et de réduire le code du programme de dizaines et de centaines de lignes. De nombreux problèmes ne peuvent être résolus sans cela.

Expressions régulières en PHP

Le langage PHP contient trois mécanismes pour travailler avec des expressions régulières - « ereg », « mb_ereg » et « preg ». La plus courante est l'interface "preg", dont les fonctions donnent accès à la bibliothèque d'expressions régulières PCRE, initialement développée pour le langage Perl, incluse avec PHP. Les fonctions Preg recherchent dans une chaîne de texte donnée des correspondances selon un modèle spécifique dans le langage d'expression régulière.

Bases de la syntaxe

Dans un court article, il est impossible de décrire en détail toute la syntaxe des expressions régulières ; il existe une littérature spéciale à ce sujet. Nous présentons uniquement les éléments principaux pour montrer les larges possibilités pour le développeur et comprendre les exemples de code.

B est formellement défini d’une manière très complexe, simplifions donc la description. Une expression régulière est une chaîne de texte. Il se compose d'un motif délimité et d'un modificateur indiquant comment le traiter. Il est possible d'inclure diverses alternatives et répétitions dans les modèles.

Par exemple, dans l'expression /\d(3)-\d(2)-\d(2)/m le séparateur sera «/» , puis vient le motif et le symbole "m" sera un modificateur.

Toute la puissance des expressions régulières est codée à l’aide de métacaractères. Le métacaractère principal du langage est la barre oblique inverse - "\". Il inverse le type du caractère qui le suit (c'est-à-dire qu'un caractère normal devient un métacaractère et vice versa). Un autre métacaractère important est la barre oblique « | », qui spécifie des variantes alternatives du modèle. Autres exemples de métacaractères :

PHP, lors du traitement des expressions régulières, traite l'espace comme un caractère significatif distinct, donc les expressions ABCWHERE et ABCWHERE sont différentes.

Sous-modèles

En PHP, les sous-modèles réguliers sont séparés par des parenthèses et sont parfois appelés « sous-expressions ». Effectuer les fonctions suivantes :

    Mettre en évidence les alternatives. Par exemple, modèle chaleur(quelque chose|oiseau|) correspond aux mots "chaleur", "oiseau de feu" Et "rôti". Et sans les parenthèses, ce ne serait qu'une chaîne vide, « oiseau » et « rôti ».

    Sous-modèle « passionnant ». Cela signifie que si une sous-chaîne correspond au modèle, toutes les correspondances sont renvoyées comme résultat. Pour plus de clarté, donnons un exemple. Étant donné l'expression régulière suivante : le gagnant reçoit((doré|doré)(médaille|coupe)) - et une ligne pour trouver des correspondances : "le gagnant reçoit une médaille d'or". En plus de la phrase originale, le résultat de la recherche renverra : "médaille d'or", "médaille", "or".

Opérateurs de répétition (quadrificateurs)

Lors de l’écriture d’expressions régulières, il est souvent nécessaire d’analyser les répétitions de nombres et de symboles. Ce n'est pas un problème s'il n'y a pas beaucoup de répétitions. Mais que faire quand on ne connaît pas leur nombre exact ? Dans ce cas, vous devez utiliser des métacaractères spéciaux.

Pour décrire les répétitions, des quadricateurs sont utilisés - des métasymboles pour spécifier la quantité. Les quadrificateurs sont de deux types :

  • général, entre parenthèses ;
  • abrégé.

Le quantificateur général spécifie le nombre minimum et maximum de répétitions autorisées d'un élément, exprimé sous la forme de deux nombres entre accolades, comme ceci : x(2,5). Si le nombre maximum de répétitions est inconnu, le deuxième argument est omis : x(2,).

Les quantificateurs abrégés représentent les symboles des répétitions les plus courantes afin d'éviter un encombrement syntaxique inutile. Trois abréviations sont couramment utilisées :

1. * - zéro ou plusieurs répétitions, ce qui équivaut à (0,).

2. + - une ou plusieurs répétitions, c'est-à-dire ,).

3. ? - zéro ou une seule répétition - (0,1).

Exemples d'expressions régulières

Pour ceux qui apprennent les expressions régulières, les exemples constituent le meilleur tutoriel. Nous en présenterons quelques-uns qui montrent leurs larges capacités avec un minimum d'effort. Tous les codes de programme sont entièrement compatibles avec les versions PHP 4.x et supérieures. Pour bien comprendre la syntaxe et utiliser toutes les fonctionnalités du langage, nous vous recommandons le livre « Regular Expressions » de J. Friedl, qui aborde en détail la syntaxe et contient des exemples d'expressions régulières non seulement en PHP, mais aussi pour Python, Perl, MySQL, Java, Ruby et C#.

Vérification de l'exactitude de l'adresse e-mail

Tâche. Il existe une page Internet qui demande au visiteur une adresse e-mail. L'expression régulière doit vérifier que l'adresse reçue est correcte avant d'envoyer des messages. Le contrôle ne garantit pas que la boîte aux lettres spécifiée existe réellement et accepte les lettres. Mais cela peut éliminer les adresses manifestement incorrectes.

Solution. Comme pour tout langage de programmation, les expressions régulières de vérification d'adresse e-mail PHP peuvent être implémentées de plusieurs manières, et les exemples de cet article ne sont pas la solution ultime. Par conséquent, dans chaque cas, nous fournirons une liste d'exigences qui doivent être prises en compte lors de la programmation, et la mise en œuvre spécifique dépend entièrement du développeur.

Ainsi, une expression qui vérifie si un email est valide doit vérifier les conditions suivantes :

  1. La présence du symbole @ dans la chaîne source et l'absence d'espaces.
  2. La partie domaine de l'adresse, suivie du symbole @, contient uniquement des caractères valides pour les noms de domaine. La même chose s'applique au nom d'utilisateur.
  3. Lors de la vérification d'un nom d'utilisateur, vous devez rechercher des caractères spéciaux tels qu'une apostrophe ou Ces caractères sont potentiellement dangereux et peuvent être utilisés dans des attaques telles que l'injection SQL. Évitez de telles adresses.
  4. Les noms d'utilisateur n'autorisent qu'un seul point, qui ne peut pas être le premier ou le dernier caractère de la ligne.
  5. Le nom de domaine doit contenir au moins deux et au maximum six caractères.

Un exemple prenant en compte toutes ces conditions est visible ci-dessous dans la figure.

Vérifier la validité des URL

Tâche. Vérifier si une chaîne de texte donnée est valide Encore une fois, les expressions régulières de vérification d'URL peuvent être implémentées de différentes manières.

Solution. Notre version finale ressemble à ceci :

/^(https?:\/\/)?([\da-z\.-]+)\.((2,6))([\/\w \.-]*)*\/?$ /

Examinons maintenant ses composants plus en détail à l'aide de la figure.

Vérification des numéros de carte de crédit

Tâche. Il est nécessaire de vérifier l'exactitude du numéro de carte plastifiée saisi pour les systèmes de paiement les plus courants. Option considérée pour les cartes uniquement

Solution. Lors de la création d'une expression, vous devez prendre en compte la présence éventuelle d'espaces dans le nombre saisi. Les chiffres sur la carte sont divisés en groupes pour faciliter la lecture et la dictée. Il est donc tout à fait naturel qu’une personne essaie de saisir le numéro de cette manière (c’est-à-dire en utilisant des espaces).

Écrire une expression universelle prenant en compte les espaces et les traits d’union possibles est plus difficile que de simplement supprimer tous les caractères à l’exception des chiffres. Par conséquent, il est recommandé d’utiliser le métacaractère /D dans l’expression, qui supprime tous les caractères à l’exception des chiffres.

Vous pouvez maintenant procéder directement à la vérification du numéro. Toutes les sociétés émettrices de cartes de crédit utilisent un format de numéro unique. L'exemple utilise ceci et le client n'a pas besoin de saisir le nom de l'entreprise - il est déterminé par le numéro. Les cartes Visa commencent toujours par 4 et comportent un numéro de 13 ou 16 chiffres. MasterCard commence dans la plage 51-55 avec une longueur de nombre de 16. En conséquence, nous obtenons l'expression suivante :

Avant de traiter une commande, vous pouvez effectuer une vérification supplémentaire du dernier chiffre du numéro, qui est calculé à l'aide de l'algorithme de Luhn.

Vérification des numéros de téléphone

Tâche. Vérification de l'exactitude du numéro de téléphone saisi.

Solution. Le nombre de chiffres des numéros de téléphone fixe et mobile varie considérablement d'un pays à l'autre. Il n'est donc pas possible de vérifier universellement qu'un numéro de téléphone est correct à l'aide d'expressions régulières. Mais les numéros internationaux ont un format strict et sont parfaits pour la vérification de modèles. Par ailleurs, de plus en plus d’opérateurs téléphoniques nationaux tentent de se conformer à une norme unique. La structure du numéro est la suivante :

+CCC.NNNNNNNNNNxEEEE, Où:

C est le code du pays, composé de 1 à 3 chiffres.

N - numéro comportant jusqu'à 14 chiffres.

E - extension facultative.

Le plus est un élément obligatoire et le signe x n'est présent que lorsque l'expansion est nécessaire.

En conséquence, nous avons l'expression suivante :

^\+(1,3)\.(4,14)(?:x.+)?$

Numéros à portée

Tâche. Vous devez faire correspondre un entier dans une plage spécifique. De plus, il est nécessaire que les expressions régulières correspondent uniquement aux nombres d'une plage de valeurs.

Solution. Voici quelques expressions pour quelques-uns des cas les plus courants :

Trouver une adresse IP

Tâche. Vous devez déterminer si la chaîne donnée est une adresse IP valide au format IPv4 dans la plage 000.000.000.000-255.255.255.255.

Solution. Comme dans toute tâche sur Langage PHP, l'expression régulière a de nombreuses variantes. Par exemple, ceci :

Vérification d'expression en ligne

Tester l’exactitude des expressions régulières peut être difficile pour les nouveaux programmeurs en raison de la complexité de la syntaxe, qui diffère des langages de programmation « classiques ». Pour résoudre ce problème, il existe de nombreux testeurs d'expressions en ligne qui permettent de vérifier facilement l'exactitude de l'expression. de ce modèle sur du vrai texte. Le programmeur saisit l'expression et les données à tester et voit instantanément le résultat du traitement. Il existe généralement également une section de référence dans laquelle les expressions régulières, les exemples et les différences d'implémentation pour les langages de programmation les plus courants sont décrits en détail.

Mais faire entièrement confiance aux résultats des services en ligne n'est pas recommandé à tous les développeurs utilisant PHP. Une expression régulière, écrite et testée personnellement, améliore vos compétences et garantit l'absence d'erreurs.

L'utilisation la plus courante des expressions régulières en Perl concerne les opérateurs de recherche et de remplacement tels que s//, m/, opérateurs connectifs =~ ou != etc. En règle générale, tous ces opérateurs disposent d'options similaires telles que :

Généralement, toutes ces options sont désignées par "/x". Ils peuvent même être utilisés dans des modèles utilisant la nouvelle construction (?...)

Les expressions régulières ou modèles sont identiques aux procédures d'expression régulière sous Unix. Les expressions et la syntaxe sont empruntées aux procédures V8 distribuées gratuitement par Henry Spencer, où elles sont décrites en détail.

Les modèles utilisent les métacaractères suivants (caractères qui désignent des groupes d'autres caractères) souvent appelés standard egrep :

Les métacaractères ont des modificateurs (écrits après le métacaractère) :

Dans tous les autres cas, les accolades sont considérées comme des caractères ordinaires (réguliers). Ainsi "*" est équivalent à (0,) , "+" est (1,) et "?" - (0,1). n et m ne peuvent pas être supérieurs à 65 536.

Par défaut, les métacaractères sont gourmands. La correspondance est propagée autant de fois que possible, sans tenir compte de l'effet des métacaractères ultérieurs. Si vous souhaitez « réduire leur appétit », utilisez le symbole « ? ». Cela ne change pas la signification des métacaractères, cela réduit simplement la propagation. Ainsi:

Les caractères génériques fonctionnent de la même manière que les guillemets doubles, vous pouvez donc y utiliser des caractères `\` (caractères barre oblique inverse) :

\t - caractère de tabulation
\n - nouvelle ligne
\r - un retour chariot
\UN - traduction de formats
\v - tabulation verticale
\un - appel
\e - s'échapper
\033 - notation de symbole octal
\x1A - hexadécimal
\c[ - symbole de contrôle
\l - caractère suivant en minuscule
\u - majuscule -//-
\L - tous les caractères sont en minuscules jusqu'à \E
\U - Dans la partie supérieure -//-
\E - limiteur de changement de registre
\Q - annuler l'action en tant que métacaractère

De plus, les métacaractères suivants ont été ajoutés à Perl :

Notez qu'il ne s'agit que d'un seul caractère. Utilisez des modificateurs pour indiquer la séquence. Donc:

De plus, il existe des métacaractères imaginaires. Désignant des symboles inexistants à l'endroit où la valeur change. Tel que:

Une limite de mot (\b) est un point imaginaire entre les caractères \w et \W. Dans une classe de caractères, "\b" représente le caractère de retour arrière. Métacaractères \UN Et \Z- sont similaires à "^" et "$", mais si le début de la ligne "^" et la fin de la ligne "$" agissent pour chaque ligne d'une chaîne multiligne, alors \UN Et \Z indique le début et la fin d'une chaîne multiligne entière.

Si le regroupement (parenthèses) est utilisé dans le modèle, alors le numéro de sous-chaîne du groupe est désigné par "\digit". Notez que suivant un modèle dans une expression ou un bloc, ces groupes sont notés « $digit ». De plus, il existe des variables supplémentaires :

Exemple:

$s = "Un 1 deux 2 et trois 3" ; if ($s =~ /(\d+)\D+(\d+)/) ( print "$1\n"; # Résultat "1" print "$2\n"; # "2" print "$+\n" ; # "2" affiche "$&\n"; # "1 deux 2" affiche "$`\n"; # "Un " affiche "$"\n"; # " et trois 3" )

Perl version 5 contient des constructions de modèles supplémentaires :

Exemple:

$s = "1+2-3*4" ; if ($s =~ /(\d)(?=-)/) # Trouver le nombre suivi de "-" ( imprimer "$1\n"; # Résultat "2" ) else ( imprimer "erreur de recherche\n" ; )

(?!modèle) - « regarder » vers l'avenir par négation :

Exemple:

$s = "1+2-3*4" ; if ($s =~ /(\d)(?!\+)/) # Rechercher un chiffre qui n'est pas suivi de "+" ( imprimer "$1\n"; # Résultat "2" ) else ( imprimer "recherche erreur\ n"; )

(?ismx) - modificateurs « internes ». Il est pratique à utiliser dans les modèles, où, par exemple, vous devez spécifier un modificateur à l'intérieur du modèle.

Règles d'expression régulière. (expression régulière)

  1. Tout caractère se représente lui-même, sauf s'il s'agit d'un métacaractère. Si vous devez annuler l'effet d'un métacaractère, placez "\" devant celui-ci.
  2. La chaîne de caractères désigne une chaîne de ces caractères.
  3. L'ensemble des caractères possibles (classe) est mis entre crochets "", cela signifie qu'un des caractères précisés entre parenthèses peut apparaître à cet endroit. Si le premier caractère entre parenthèses est « ^ », alors aucun des caractères spécifiés ne peut apparaître à ce stade de l'expression. Au sein d'une classe, vous pouvez utiliser le symbole "-" pour désigner une plage de caractères. Par exemple, a-z est l'une des petites lettres de l'alphabet latin, 0-9 est un chiffre, etc.
  4. Forum du portail PHP. S.U.