Page 1 sur 1

Tester la valeur numérique d'une chaîne

Posté : 15 mai 2007, 13:48
par lem
Bonjour,

J'ai dans ma table un champ de type varchar(255).
Ce champ contient une quantité. On peut par exemple avoir "12" ou "1/2" ou "250g" ou "100ml" etc.
J'ai besoin de savoir si la valeur de mon champ est numérique ou non. Par exemple, "12" est numérique (même s'il est stocké sous forme de chaîne) mais "100ml" ne l'est pas.

Pensez-vous qu'il soit plus judicieux de les distinguer à l'aide d'expressions régulières ou en testant la "valeur" à l'aide d'un eval (ou quelque chose du même type) ou autre ?

J'ai essayé de comparer $monchamp avec (int)$monchamp mais mon script les trouve égaux même si $monchamp vaut "350g": quand je fais un echo des 2 valeurs, il affiche bien 350g et 350, mais quand je fais le test test d'égalité (avec "==") il me retourne true à chaque fois.

Voici mon code.
$ing est mon tableau renvoyé par ma requête sql, nb_i est le champ que je teste.
$le_nombre=(int)$ing["nb_i"];
if ($ing["nb_i"] == $le_nombre)
{
  echo $ing["nb_i"] . " vaut " . $le_nombre;
}
Ce code m'affiche:
350g vaut 350

Merci de vos conseils.

Posté : 15 mai 2007, 13:59
par Ryle
et pourquoi pas simplement utiliser is_numeric() ? ;)

Posté : 15 mai 2007, 14:01
par Jules Petibidon
hello,

c'est on ne peut plus normal, lorsque tu compares une chaine à un entier, elle est automatiquement castée en entier.

par contre ce que tu peux essayer c'est ceci :

$ma_chaine == (string) $mon_entier;

Posté : 15 mai 2007, 14:56
par lem
et pourquoi pas simplement utiliser is_numeric() ? ;)
Impeccable, merci !
hello,

c'est on ne peut plus normal, lorsque tu compares une chaine à un entier, elle est automatiquement castée en entier.

par contre ce que tu peux essayer c'est ceci :

$ma_chaine == (string) $mon_entier;
C'est noté :)