|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre régulier
![]() Inscription : mai 2007 Messages : 180 ![]() |
Avant de convertir une chaine en float via un cast (float), je veux être certain que le format de la chaine soit correcte.
Je n'accepte que : - une chaine qui contient "entier(s).entier(s)" (test avec un preg_match) - ou une chaine composée de caractères de 0 à 9 (j'utilise le ctype_digit qui fait ça simplement) Code :
Je n'arrive pas a placer une assertion avant et arrière pour n'autoriser que mon motif et seulement lui seul ! |
||
|
|
00
|
|
|
#2 |
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
Si j'ai bien compris, ce n'est pas une assertion qu'il faut chercher à placer ici mais purement et simplement les ancres de début (^)/fin de chaîne ($) (avec l'option D) :
Notez que [0-9] peut s'abréger par le symbole \d et {0,} par le quantifieur * (pourquoi suivi d'un autre quantifieur + ?). Pourquoi faire un test supplémentaire avec ctype_digit puisque l'expression régulière pourrait le faire (par une alternative ou le quantifieur ? - {0,1} - par exemple). Attention, | est un opérateur de bit (ou logique sur les bits) et non l'opérateur logique ou (|| ou or mais sont de priorité différente). |
|
|
00
|
|
|
#3 |
|
Membre régulier
![]() Inscription : mai 2007 Messages : 180 ![]() |
L'option D n'apparait pas dans la doc php en ligne, c'est dommage (http://fr.php.net/manual/fr/referenc...ern.syntax.php)
Je faisait appel à ctype_digit en pensant qu'il était optimisé, plus rapide qu'un preg_match... mais apparement je me suis trompé. Merci pour la réponse efficace
|
|
|
00
|
|
|
#4 |
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
Si cette option est bien mentionnée dans la documentation mais à la page des options et non à celle de la syntaxe des masques : options de recherche. Ou encore dans le tutoriel d'initiation aux expressions régulières en PHP : Le modificateur D.
|
|
|
00
|
|
|
#5 |
|
Membre régulier
![]() Inscription : mai 2007 Messages : 180 ![]() |
Pour info, la même version, mais qui autorise des réels (float) négatif :
Code :
$pattern ='`^(?:[-])?\d+(?:[.]\d+)?$`D'; |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com