expressions régulières et correspondance exacte

d0m
Mammouth du PHP | 1141 Messages

09 août 2007, 13:57

Salut,

je ne suis pas très familier de l'utilisation des expressions régulières en PHP.
J'ai jeté un coup d'oiel aux fonctions mais quelque chose m'échappe.
Dans la plupart de ces fonctions php, on cherche si une occurence apparait mais je n'arrive pas à voir comment vérifier qu'une chaine correspond exactement à une expression.

par exemple pour les chaines de ce type :
17,458
[0-9]+[,]{0-1}[0-9]*

il pourrait y avoir d'autres caractères avant ou après. Est on obligé de testeer ensuite la longueur des chaines?

ViPHP
ViPHP | 928 Messages

09 août 2007, 14:03

Bonjour, pour vérifier si une chaîne correspond exactement à l'expression tu peux utiliser le caractère ^qui délimite le début de l'expression, et $ qui la termine.

Par exemple :
$str1 = '17,458';
$str2 = '17,458 euros';
$str3 = 'Prix : 17,458';

// ^[0-9]+(,[0-9]+)?$ matchera $str1 mais ni $str2 ni $str3

// [0-9]+(,[0-9]+)?$ matchera $str1 et $str3 mais pas $str2

// ^[0-9]+(,[0-9]+)? matchera $str1 et $str2 mais pas $str3

// [0-9]+(,[0-9]+)? matchera les trois
(,[0-9]+)? signifie que ton nombre peut potentiellement prendre une virgule avec des chiffres derrière (donc l'expression matchera aussi les entiers).

ViPHP
ViPHP | 5924 Messages

09 août 2007, 14:13

donc l'expression matchera aussi les entiers
Les nombres décimaux, les nombres décimaux… :)

Sinon, tu peux remplacer [0-9] par \d, c'est la même chose en plus court. :)

d0m
Mammouth du PHP | 1141 Messages

09 août 2007, 14:23

merci pour vos réponses, ca marche

ViPHP
ViPHP | 1380 Messages

09 août 2007, 16:41

donc l'expression matchera aussi les entiers
Les nombres décimaux, les nombres décimaux… :)
Genova a raison, le groupe (,[0-9]+)? est optionnel par le point d'interrogation, il est donc correct de dire qu'il matchera les décimaux et les entiers.

:wink:
ripat

ViPHP
ViPHP | 5924 Messages

09 août 2007, 16:44

Ah, j'avais pas compris dans ce sens là, oui. Je croyais qu'il voulait dire qu'en plus de pouvoir détecter les nombres entiers, ca pouvait détecter les nombres décimaux, alors que c'est le contraire :mrgreen: