Page 1 sur 1

expressions régulières et correspondance exacte

Posté : 09 août 2007, 13:57
par d0m
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?

Posté : 09 août 2007, 14:03
par Genova
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).

Posté : 09 août 2007, 14:13
par Sékiltoyai
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. :)

Posté : 09 août 2007, 14:23
par d0m
merci pour vos réponses, ca marche

Posté : 09 août 2007, 16:41
par Ripat
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:

Posté : 09 août 2007, 16:44
par Sékiltoyai
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: