OVH Cloud OVH Cloud

[Expressions regulieres] analyse d'une variable PHP

4 réponses
Avatar
laurent.abadie
Bonjour,

je cherche à représenter une variable PHP par une expression
régulière, la règle est simple, en français : un $ puis une ou
plusieurs lettre puis une ou plusieurs lettre ou chiffre, en PHP j'ai
traduit ça par :

^[\$][a-z]([a-z]|[0-9])*

Quelqu'un peut me dire pourquoi lorsque je teste une telle expression
avec ereg, cela accepte-t-il des caractères de ponctuation, le 0-9 et
le a-z ne sont pas censés accepter que des chiffres (respectivement
des lettres) ?

Merci d'avance pour votre aide !

4 réponses

Avatar
Antoine Dinimant
Darius a écrit:
Bonjour,

je cherche à représenter une variable PHP par une expression
régulière, la règle est simple, en français : un $ puis une ou
plusieurs lettre puis une ou plusieurs lettre ou chiffre,


à partir de quand les chiffres sont-ils autorisés ? si j'en crois ta
regex, $a2 est bon

en PHP j'ai
traduit ça par :

^[$][a-z]([a-z]|[0-9])*


ton expression ne prend pas de signe de ponctuation... le problème doit
venir du reste de ton code, ou alors de ton interprétation... par
exemple si tu la testes avec '$az,erty', ça marche, puisqu'elle
reconnaît '$az'. Si tu veux éviter ça, il faut l'ancrer à droite avec $

Sinon, ^$[a-z][a-z0-9]* serait plus simple, plus correct et plus
efficace, mais fait exactement la même chose que la tienne. En particulier :

- elle ne prend pas les majuscules -> [a-zA-Z] ou eregi

- elle ne prend pas les lettres accentuées... [a-z0-9] -> w, mais w
accepte aussi l'underscore _

si ce que tu veux c'est reconnaître un nom de variable PHP, la doc te
fournit la regex : [a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*

Avatar
Shrom
"Darius" a écrit dans le message de
news:
Bonjour,

je cherche à représenter une variable PHP par une expression
régulière, la règle est simple, en français : un $ puis une ou
plusieurs lettre puis une ou plusieurs lettre ou chiffre, en PHP j'ai
traduit ça par :

^[$][a-z]([a-z]|[0-9])*

Quelqu'un peut me dire pourquoi lorsque je teste une telle expression
avec ereg, cela accepte-t-il des caractères de ponctuation, le 0-9 et
le a-z ne sont pas censés accepter que des chiffres (respectivement
des lettres) ?

Merci d'avance pour votre aide !


Ton expression se traduit par:
un terme qui commence par une lettre en minuscule puis une lettre en
minuscule ou un chiffre zéro fois ou plus, donc un terme comme $a&@.$ est
valable
je mettrais plutôt:
^[$][a-z][a-z0-9]*$

Tu oublies aussi le underscore et les lettres majuscules pour décrire une
variable PHP

Avatar
Guillaume Bouchard
Darius wrote:
Bonjour,

je cherche à représenter une variable PHP par une expression
régulière,


http://www.php.net/manual/en/language.variables.php

Et principalement

Variable names follow the same rules as other labels in PHP. A valid
variable name starts with a letter or underscore, followed by any number
of letters, numbers, or underscores. As a regular expression, it would
be expressed thus: '[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*'

N'oublie pas d'ajouter les ^ et $.

--
Guillaume.

Avatar
Stephane Pineau
Le 29 Jun 2004 12:48:05 GMT, (Darius) écrivait:

je cherche à représenter une variable PHP par une expression
régulière, la règle est simple, en français : un $ puis une ou


Tu as l'expression régulière idoine indiquée dans la doc PHP. Extrait :

" Les noms de variables suivent les mêmes règles de nommage que les autres
entités PHP. Un nom de variable valide doit commencer par une lettre ou un
souligné (_), suivi de lettres, chiffres ou soulignés. Exprimé sous la forme
d'une expression régulière, cela donne :
'[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*' "

A lire sur http://www.php.net/manual/fr/language.variables.php

Cdlt,
Stéph'

--
AcroDict : Dictionnaire francophone des acronymes informatiques
<URL:http://www.teaser.fr/~spineau/acrodict/index.htm>
PHP Page : Script PHP3 Gratuits (Forum, Gestionnaires BDD, etc..)
<URL:http://steph.pineau.free.fr/php/index.php>