530 Shares 9487 views

PHP (regex) – quel est-il? Exemples et vérification des expressions régulières

Lorsque vous travaillez avec du texte dans un langage de programmation moderne, les développeurs se réunissent en permanence avec les objectifs de validation d'entrée pour la conformité avec le motif désiré, la recherche et remplacer des fragments d'essai et d'autres types d'opérations de traitement de l'information de caractère. Développez vos propres algorithmes de validation conduit à la perte de temps, la compatibilité de code et de la complexité de son développement et de modernisation.

Le développement rapide de l'Internet et des langages de conception WEB nécessaire la création de moyens polyvalents et compacts de traitement de texte avec un montant minimum requis pour ce code. Il ne fait pas exception et est populaire parmi les débutants et les développeurs professionnels du langage PHP. Le langage d'expression régulière comme les modèles de texte pour simplifier la tâche de gérer le texte et réduire le code pour des dizaines et des centaines de lignes. De nombreux problèmes ne peuvent être résolus du tout sans elle.

Les expressions régulières en PHP

langage PHP a trois mécanismes pour travailler avec des expressions régulières – «ereg», «mb_ereg» et «preg». L'interface est la plus commune «preg», dont les fonctions l'accès à la bibliothèque du support d'expression régulière PCRE, développé à l'origine pour le langage Perl, qui est inclus dans le package PHP. Preg-fonctions dans la recherche d'une correspondance de chaîne de texte donné, selon un certain modèle dans la langue des expressions régulières.

Les bases de la syntaxe

Dans le cadre d'un court article, il est impossible de décrire en détail l'ensemble de la syntaxe d'expression régulière, pour cela, il existe une littérature spéciale. Nous ne présentons que les principaux éléments à montrer les possibilités de développeur et de comprendre les exemples de code.

En PHP expression régulière est formellement défini très difficile, et donc de simplifier la description. Une expression régulière est une chaîne de texte. Il se compose d'un modèle de séparateur dédié et le modificateur indiquant la façon de le gérer. l'inclusion possible dans les différentes alternatives et répétitions de motifs.

Par exemple, dans l' expression / d {3} – d {2} – d {2} / diviseur m est "/", suivi du modèle, et le symbole «m» est le modificateur.

Toute la puissance des expressions régulières est codée en utilisant des méta-caractères. La principale langue métacaractère est la barre oblique inverse – « ». Il modifie le type de caractères qui suit sur le côté opposé (ie. E. converti en un caractère générique ordinaire et vice-versa). Une autre métacaractère importante est une ligne droite «|», précise le modèle alternatif. D'autres exemples de méta-caractères:

^ Démarrez objet ou une chaîne
( Démarrez subpattern
) fin subpattern
{ Démarrer quantificateurs
} fin quantificateurs
d chiffre décimal de 0 à 9
D tout caractère qui est pas un nombre
s symbole vide, l'espace, onglet,
w dictionnaire symbole

PHP, le traitement des expressions régulières, l'espace considéré comme un caractère valide distinct, de sorte que l'expression de XYZ et ABC OÙ sont différents.

Les sous-masques

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

  1. alternatives d'allocation. Par exemple, le motif de la chaleur (quelque chose | Bird |) coïncide avec les mots « chaleur », « Oiseau de feu » et « chaud ». Et sans les crochets, il ne sera une chaîne vide, « oiseau » et « chaud ».

  2. subpattern "Spectaculaire". Cela signifie que si le motif correspond substring, puis retourne tous les matches. Pour plus de clarté, nous donnons un exemple. Compte tenu de l'expression régulière suivante: le gagnant reçoit ((or | plaqué or) (médaille | coupe)) – et la chaîne pour les matchs «le gagnant obtient une médaille d'or. » En plus de la phrase initiale, les résultats de la recherche seront émis: « médailles » « Médaille d' or », « or ».

Opérateurs répétitions (kvadrifikatory)

En compilant l'expression régulière est souvent nécessaire d'analyser la répétition des nombres et des symboles. Ce n'est pas un problème, sinon beaucoup de répétitions. Mais ce qu'il faut faire quand on ne connaît pas leur nombre exact? Dans ce cas, il est nécessaire d'utiliser des métacaractères spéciaux.

Pour une description des répétitions utilisées kvadrifikatory – métacaractères pour spécifier le nombre. Kvadrifikatory sont de deux types:

  • commun entre parenthèses;
  • réduit.

Dans l'ensemble quantificateurs touché par le nombre minimum et maximum de l'élément de redoublements autorisés sous la forme de deux nombres dans les accolades, tels que x {2,5}. Si le nombre maximum de répétitions est pas connue, le second argument n'est pas spécifié: x {2}.

quantificateurs symboles sont abrégés pour des répétitions les plus courantes afin d'éviter la syntaxe de surcharge inutile. En général, il y a trois coupes:

1. * – zéro répétitions ou plus, ce qui équivaut à {0,}.

2. + – une ou plusieurs répétitions, par exemple, {1} …

3.? – zéro ou une seule répétition – {0,1}.

Exemples regex

Pour ceux qui apprennent des expressions régulières, des exemples – le meilleur manuel. Nous donnons quelques-uns qui montrent leurs possibilités avec un minimum d'effort. Tout le code est entièrement compatible avec les versions de PHP 4.x et au-dessus. Pour bien comprendre la syntaxe et l'utilisation de toutes les fonctions linguistiques, nous vous recommandons le livre de J .. Friedl, « expressions régulières », qui syntaxe pleinement pris en compte, et il existe des exemples d'expressions régulières non seulement PHP, mais aussi pour un Python, Perl, MySQL, Java, Ruby et C #.

Validation Adresse e-mail

Tâche. Il y a une page Internet sur laquelle le visiteur est invité adresse email. Expression régulière doit vérifier l'exactitude des adresses avant d'envoyer des messages. Vérifiez ne garantit pas que la boîte aux lettres spécifiée existe et reçoit des messages. Mais éliminer les mauvaises adresses de toute évidence possible.

Décision. Comme avec tout langage de programmation, en PHP regex vérification adresse e-mail peut être mis en œuvre de différentes manières, et les exemples de cet article ne sont pas le choix final et seulement. Par conséquent, dans chaque cas, nous fournirons une liste d'exigences qui doivent être pris en compte lors de la programmation et la mise en œuvre spécifique dépend entièrement du développeur.

Ainsi, l'expression qui teste un email valide, doit vérifier les conditions suivantes:

  1. La présence dans la ligne de départ le symbole @, et il n'y a pas de lacunes.
  2. La partie de domaine de l'adresse du symbole @, ne contient que des caractères valides pour les noms de domaine. De même pour le nom de l'utilisateur.
  3. Lors de la vérification le nom d'utilisateur est nécessaire pour déterminer la présence de caractères spéciaux tels que une apostrophe ou d'une ligne verticale. Ces symboles sont potentiellement dangereux et peuvent être contenus dans ces types d'attaques que SQL-injection. Éviter les adresses.
  4. les noms d'utilisateur permettent un seul point, qui ne peut être le premier ou le dernier caractère de la chaîne.
  5. Le nom de domaine doit contenir au moins deux et pas plus de six caractères.

Exemple, en tenant compte de toutes ces conditions peut être vu dans la figure suivante.

Validation d'une URL

Tâche. Vérifiez si la chaîne de texte spécifiée est valide adresse URL. Encore une fois, nous notons que l'URL vérification des expressions régulières peut être mis en œuvre de diverses manières.

Décision. Notre version finale est la suivante:

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

Maintenant, analyser ses composants plus en détail à l'aide du dessin.

selon la revendication 1 Avant l'URL ne doit pas avoir de caractères
la revendication 2, Vérifier la présence du préfixe obligatoire «http»
point 3 Il doit y avoir aucun symbole
revendication 4, S'il «s», les points d'URL à une connexion sécurisée «https»
revendication 5, partie requise de la « // »
la revendication 6, Aucun caractère
p 9/7. Vérification du premier domaine de premier niveau et la présence du point
p.10-13 Vérification du domaine de l'écriture du deuxième niveau et le point
p.14-17

URL de la structure du fichier – un ensemble de nombres, des lettres, des traits de soulignement, des tirets, des points, et une barre oblique à la fin

Vérifiez les numéros de carte de crédit

Tâche. Vous devez implémenter la validation du numéro de carte de crédit entré des systèmes de paiement les plus courants. Une variante uniquement pour les cartes Visa et MasterCard.

Décision. Lors de la création de l'expression que vous devez prendre en compte la présence éventuelle de lacunes dans la salle d'entrée. Les chiffres sur la carte sont divisés en groupes pour faciliter la lecture et la dictée. Il est donc naturel qu'une personne peut essayer d'entrer un numéro de cette manière (par exemple. E. L'utilisation des espaces).

Écrivez une expression universelle qui prend en compte les espaces possibles ou des traits d'union, est plus compliqué que simplement jeter tous les caractères sauf chiffres. Par conséquent, nous vous recommandons d'utiliser une expression générique / D, ce qui supprime tous les caractères sauf chiffres.

Maintenant, vous pouvez aller directement au numéro de chèque. Toutes les entreprises, les émetteurs de cartes de crédit utilisent un format numérique unique. Dans l'exemple, il est utilisé, et le client n'a pas besoin d'entrer le nom de la société – il est déterminé par le nombre. Les cartes Visa commencent toujours avec les numéros 4 et ont une longueur de 13 ou 16 chiffres. MasterCard commence dans la gamme de 51-55 avec un long numéro 16. En conséquence, nous obtenons l'expression suivante:

Avant de traiter l'ordre peut encore être testé les derniers chiffres du numéro, qui est calculé sur l'algorithme Luhn.

Vérification de numéro de téléphone

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

Décision. Le nombre de chiffres dans les numéros de téléphone fixes et mobiles varient considérablement selon les pays, afin de vérifier universellement utilisant des expressions régulières, numéro de téléphone correctement impossible. Mais les numéros internationaux ont un format strict et parfait pour vérifier le motif. D'autant plus que de plus en plus d'opérateurs téléphoniques nationaux tentent de répondre à la même norme. structure de la chambre est la suivante:

+ CCC.NNNNNNNNNNxEEEE, où:

– C – est le code de pays composé de 1-3 chiffres.

– N – nombre maximum de 14 chiffres.

– E – extension optionnelle.

Plus est un élément indispensable, et le signe X est présent que lorsque l'extension nécessaire.

Par conséquent, nous avons l'expression suivante:

^ + [0-9] {1,3 } [0-9] {} 4,14. (:. X +)? $

Les chiffres de la gamme

Tâche. Il est nécessaire d'assurer entier de coïncidence d'une certaine gamme. En outre, il est nécessaire de trouver une expression régulière que les numéros de la gamme.

Décision. Voici quelques expressions à certains des cas les plus courants:

Déterminer l'heure 1-24 ^ (1 [0-2] | [1-9]) $
Jour du mois 1-31 ^ (3 [01] | [12] [0-9] | [1-9]) $
Secondes ou minutes 0-59 ^ [1-5]? [0-9] $
Un certain nombre de 1 à 100 * (100 |? [1-9] [0-9]) $
Jour de l'année 1-366 ^ (36 [0-6] | 3 [0-5] [0-9] | [12] [0-9] {2} |? [1-9] [0-9]) $

Recherche IP-adresses

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

Décision. Comme pour tout problème dans la langue de PHP, l'expression régulière a beaucoup varintov. Par exemple, ceci:

vérification en ligne des expressions

Vérifiez regex correctement pour les débutants peut être difficile en raison de la complexité de la syntaxe, qui diffère des langages de programmation « réguliers ». Pour résoudre ce problème, il y a beaucoup de testeurs en ligne des expressions qui le rendent facile à vérifier l'exactitude du modèle que vous avez créé dans le texte réel. Le programmeur entre l'expression et les données de vérification et de voir instantanément le résultat du traitement. En général, il est présent une section de référence, qui détaille les expressions régulières, des exemples et des différences de mise en œuvre pour les langues les plus étendues.

Mais les résultats des services en ligne entièrement confiance déconseillés pour tous les développeurs qui utilisent PHP. est écrit une expression régulière et vérifiée en personne, soulève la qualification et garantir l'absence d'erreurs.