tester si un la saisie d'un champde formulaire est bien un nombre
Le
Cornelius

Salut,
sir dans un champ input texte, l'utilisateur saisit 1a,2 ou 1aacd,3e par
exemple, les fonction de conversion arrive à convertir ça en float ou
integer et ce n'est pas ce que je veux, pour tester si le champ est bien
numérique (montant à saisir dans une BDD).
if((float)$_POST["mon_champ"])
echo "c'est un float !";
Et donc ça passe.
is_numeric ne reconnait pas 1,2 mais que 1.2 (reconnait pas la virgule),
gênant.
ya pas une méthode ardicalemnt efficace ?
(Surtout que je ne suis certainement ps le seul a avoir été confronté à ce
problème)
Merci d'avance
sir dans un champ input texte, l'utilisateur saisit 1a,2 ou 1aacd,3e par
exemple, les fonction de conversion arrive à convertir ça en float ou
integer et ce n'est pas ce que je veux, pour tester si le champ est bien
numérique (montant à saisir dans une BDD).
if((float)$_POST["mon_champ"])
echo "c'est un float !";
Et donc ça passe.
is_numeric ne reconnait pas 1,2 mais que 1.2 (reconnait pas la virgule),
gênant.
ya pas une méthode ardicalemnt efficace ?
(Surtout que je ne suis certainement ps le seul a avoir été confronté à ce
problème)
Merci d'avance
php convertira tout ça en 1 ce qui n'est sans doute pas le résultat
attendu...
non
si tu veux reconnaître la virgule comme synonyme du point décimal, rien ne
t'empêche de faire
$nombre=strtr($nombre, ',' , '.');
if(is_numeric($nombre)) ...
mais bon, il faudra pas tomber sur un comptable anglo-saxon employant la
virgule comme séparateur des milliers...
--
P'tit Marcel
Merci ç'est ce que j'ai finalement retenu.
Niveau vitesse, enter ereg_replace et strtr ?? Ce sont des alias ?
temps pis pour lui !!
Ces des nenettes des ventes qui seront sensées remplir ces champs (réponses
à demandes de prix)
oui (pas d'appel à la bib POSIX).
strtr est juste conçu pour remplacer caractère par caractère. str_replace
lui doit avoir en plus des routines de déplacement de chaîne (quand on
remplace un caractère par 10 il faut pousser le reste de la chaîne) donc
tc=pa il devrait être moins adapté. Mais bon là je pinaille ;-)
--
P'tit Marcel
statistiques sur les forums modérés : http://www.centrale-lyon.org/ng/
Extrait de la doc PHP (commenataire d'un user pour str_replace)
"on 25-Feb-2003 12:31, igjav at cesga dot es wrote:"So am I wrong if I say
that str_replace doesn't makes sense,..."
yes, you are. the difference between both functions ist the speed of
execution. if you want to replace only single characters, it is faster to
use strtr(). but if you want to replace bigger parts of a string, you'd
better use str_replace. it is much, much faster in this case."
Ce qu'a dit P'tit Marcel est logique: remplacer un cararctère amène a
changer le contenu d'un pointeur (en parlant C). Alors que remplacer une
chaine par une chaine, c'est beaucoup plus de traitement (découpage,
décalalge, copies/recopie en mémoires, etc...)
<html>
<head><title>Entree numerique</title>
<script>
function carClavier(e){
if (window.event)
return String.fromCharCode(window.event.keyCode); //pour I.E
else
return String.fromCharCode(e.which); //pour Netscape
}
function testNum(e){
caractereÊrClavier(e);
if (caractere < "0" || caractere > "9")return false; else return true;
}
</script>
</head>
<body>
<form>
<!--Ce champ n'accepte que des valeurs numériques :-->
<input onKeyPress="return testNum(event)">
</form>
</body>
</html>
ya pas mieux : on se prend pas la tête comme vous l'avez fait avec ereg ou
pas ereg et c'est executé côté client, donc plus rapide.
Tiré de l'exxelllent livre "les cahiers du programmeur 2" de Ph Chaléat et D
Charnay aux editions eyrolles.
Merci, j'allais justement rajouter et chercher du code javasscript pour
faire travailler le client, mais bon la solution d'avant est incontournable:
Je ne peux pas me permettre d'accepter une données d'un "client" pour mettre
dans une BDD de production.