bonjour,
Comment puis-je tester que les éléments d'un input texte sont des nombres du style : 542 ou 693.54 ou meme 541,52
Dois-je m'amuser à prendre des sous-chaines et tester chacune d'entre elles ou existe-t-il un autre moyen de le faire ?
bonjour,
Comment puis-je tester que les éléments d'un input texte sont des nombres du style : 542 ou 693.54 ou meme 541,52
Dois-je m'amuser à prendre des sous-chaines et tester chacune d'entre elles ou existe-t-il un autre moyen de le faire ?
je ne l'ai pas fait, mais cela est certainement aisé avec un regex
La question à se poser c'est est-ce vraiment indispensable...
Car moi je voudrais bien le faire dans le cas certains utilisateurs pourraient saisir des caractères au lieu de chiffres...
Sinon je vois pas comment le faire...Pour les regex j'y connais rien moi![]()
regardes du coté de floatval sur php.net, il existe aussi intval, strval is_objet is_array .. j'en passe et des emilleurs
bye
Je dirais avec ça:
http://fr2.php.net/manual/fr/function.gettype.php
comme ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <? $Var = str_replace(",",".",$Var); if ((gettype($Var)=="integer") || (gettype($Var)=="double")) { echo "c'est bon"; }else{ echo "C'est pas bon"; } ?>
ou ça ?
http://fr2.php.net/is_numeric
par contre ca gérera peut etre pas le . et la , mais juste un des deux ?
Pas si évident, ce problème de format mixte. Voici une solution possible:
Cas indéterminé: 123.456 impossible à résoudre car valable dans les deux formats.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 function checkValeur($v){ // on balance les espaces éventuels. $v = str_replace (' ', null, $v); // détection du format type ddddd.dd ou ddd,ddd.dd ou .dd if(is_numeric($v) || preg_match('#^(?:\d{1,3}(?:,\d{3})*|\d+)\.\d+$#', $v)){ return str_replace(',', null, $v); // détection du format type ddd.ddd,dd ddddd,dd et conversion en format dddddd.dd } elseif (preg_match('#^(?:\d{1,3}(?:\.\d{3})*|\d+),\d+$#', $v)){ return str_replace(array('.', ','), array(null, '.'), $v); // si autre format } else { return 'format inconnu'; } } // tableau d'essai $a = array( '22000.25', '22.000,25', '22.00.0,25', '22.000', '22,55', '0,55', '22 000.25', '22000.25', '2.20.00', '22.55', '0.55', '.55' ); foreach($a as $k=>$v){ echo $v.' --> '.checkValeur($v).'<br />'; }
Merci à vous tous pour vos indications...
J'ai testé chacune des solutions proposées et j'ai donc choisi le is_numeric qui correspond plus à mes attentes et qui fonctionnent pour tous les cas possibles
dans la FAQ il y a aussi des exemples de tests de valeurs :
http://php.developpez.com/faq/?page=...aisie_exemples
Avec les deux j'ai fait un str_replace pour la virgule et donc j'obtiens toujours une valeur avec un point donc c'est bon pour le coté décimal...Envoyé par siddh
je voulais juste éviter que 'lutilisateur saisisse un chaine de caractère, ce qui ne conviendrait pas...(on sait jamais ca peut arriver qu'ils ne savent pas lire)
et le reste c'est juste un is_numeric et c'est tout
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager