Probleme de RegExp [JS] - HTML/CSS - Programmation
Marsh Posté le 29-07-2003 à 14:24:47
comment faire la même chose en beaucoup moins compliqué:
Code :
|
Tu noteras que ça vérifie à la fois que c'est un nombre et qu'il est entier ...
[edit: j'avais mis ceil mais je trouve ça mieux avec floor ]
Marsh Posté le 29-07-2003 à 14:29:11
V test, merci pour ton aide
ta technique est bcp plus simple que les RegExp
Marsh Posté le 29-07-2003 à 14:32:14
mouahaha c'est marrant j'étais en train de corriger dans mon post.
Quoi qu'il en soit ça revient au même avec floor ou ceil.
Le truc c'est que tu vérifies que l'arrondi d'un nombre est egale à lui même, ce qui ne se produit que lorsque le nombre est entier ( avec floor ou ceil).
Et dans le cas d'une valeur qui n'est pas numérique, ceil et floor retourne "NaN" et on a donc bien une différence entre "NaN" et la valeur d'origine.
Marsh Posté le 29-07-2003 à 14:42:38
lol, moi aussi g edit mon post quand g vu que tv change le ceil en floor
oki, g compris
juste pour ma culture, la RegExp qu'il y a dans mon premier post, pq quand je saisi un entier il rentre dans le if ??
Marsh Posté le 29-07-2003 à 14:46:29
Y'a parseInt() qu'est fait pour çà.
Code :
|
Marsh Posté le 29-07-2003 à 14:48:00
oui gv regarde mais je voyais po comment l'utiliser
merci pour cette solution
Marsh Posté le 29-07-2003 à 14:52:27
Mara>
juste pour t'amuser un jour fait un alert de parseInt("08" ) sur n'importe quel browser sauf Opera.
Depuis j'evite d'utiliser cette fonction.
Marsh Posté le 29-07-2003 à 15:02:07
@Anapajari
g test parseInt("08" ), ca a rien fait de particulier (IE)
qu'as tu remarquer quand tu l'as fait ??
Marsh Posté le 29-07-2003 à 15:05:12
c du delire, avec parseInt aussi il rentre quand meme dans le if
la j'avoue que je vois po pq
Marsh Posté le 29-07-2003 à 15:07:24
C'est normal, la défition complète de parseInt est :
Citation : parseInt(aNumericString, aRadixValue) |
Si tu fait parseInt( "08" ), tu n'indique pas la base à utiliser, donc comme çà commence par un 0, il considère que c'est du binnaire. Essaye avec parseInt( "01" ), tu verras que les résultat est bien 1. Si tu veux que çà marche avec "08" il faut écrire parseInt( "08", 10 )
Merçi de ta remarque, je n'avais jamais eu l'occasion de lire en intégralité cette définition et donc de comprendre vraiement ce qu'elle fait. J'ai donc appris un truc de plus, comme souvent quand on répond aux questions
Marsh Posté le 29-07-2003 à 15:16:46
Mara> en fait c'est un "probleme" assez connu, je pense qui si tu fais parseint et javascript sur google c'est un des premiers trucs qui doit remonter. Donc perso j'ai pris l'habitude d'utiliser les arrondis à la place.
En plus si jamais le champs est 134OFDE36 est bien parseInt va te retourner 134 comme c'est expliqué la:
Citation : Note also that parseInt() may only interpret the leading portion of a string. As soon as it encounters an invalid integer numeric character it will assume the scanning is complete. It will then silently ignore any remaining characters in the input argument. |
Juntao2k2> Comprends pas ton probleme, quand est ce qu'il rentre dans le if alors qu'il devrait ps?
Marsh Posté le 29-07-2003 à 15:22:54
Mara's dad a écrit : C'est normal, la défition complète de parseInt est :
|
tu viens de mettre le doigt sur un problème que je me suis posé il y a de ça plusieurs mois !!
Marsh Posté le 29-07-2003 à 15:44:36
Anapajari a écrit : Mara> en fait c'est un "probleme" assez connu, je pense qui si tu fais parseint et javascript sur google c'est un des premiers trucs qui doit remonter. Donc perso j'ai pris l'habitude d'utiliser les arrondis à la place. |
Et floor va te retourner NAN, dans les deux cas, tu as donc un moyen de détecter le problème.
Je ne dis pas qu'une méthode est meilleur que l'autre dans l'optique de détecter si la saisie est bien un entier. Je trouve juste que bannir une fonction parce-qu'on ne la connais pas n'est pas un bon réflexe.
Marsh Posté le 29-07-2003 à 15:51:00
Farpaitement d'accord, d'ailleurs j'en decouvre chaque jour sur ce forum !
Mais pour parseInt j'en démords c'est caca, mais c'est parce que je me suis toujours servi des arrondis que je dis ça...
Marsh Posté le 29-07-2003 à 16:01:28
Bon, juste pour le sport hein :
parseInt( "10 ?" ) -> 10
Tu fait comment avec Math.floor ?
et y'a aussi les autre bases :
a="111";
Math.floor( a ) -> 111
parseInt( a, 2 ) -> 7
parseInt( a, 8 ) -> 73
parseInt( a, 10 ) -> 111
parseInt( a, 16 ) -> 273
C'est donc pas complètement inutile quand on sait comment çà marche.
Marsh Posté le 29-07-2003 à 16:11:02
Et mais d'abord!
De toute façon si une fonction existe dans un language c'est rarement pour faire joli. Ton exemple sur le ? est pas mal choisi, mais perso je trouverais plus d'utilité à parseint pour recuper les numeros de la rue dans un champs adresse par exemple. Sinon j'utiliserais parseFloat. Parce que si ya ecrit 10.50? tu fais quoi? Hein comment ça retournera 10 et c'est qui faut? ok je me tais maintenant!
Juntao2k2 a écrit : pq floor retournerais NaN dans les 2 cas ?? |
Pas dans les deux cas seuleument dans le premier, puisque le ? fera planter la conversion. Dans le deuxieme ça retourne 111 comme a marqué Mara's Dad.
Marsh Posté le 29-07-2003 à 16:13:53
Juntao2k2 a écrit : pq floor retournerais NaN dans les 2 cas ?? |
Nan, t'as pas compris :
parseInt( "134OFDE36" ) -> 134, donc 134 != "134OFDE36"
Math.floor( "134OFDE36" ) -> NaN, donc NaN != "134OFDE36"
Dans les deux cas ( parseInt, et Math.floor ) tu détecte le problème de saisie !
Marsh Posté le 29-07-2003 à 16:34:48
Mara's dad a écrit : comme çà commence par un 0, il considère que c'est du binnaire. |
De l'octal. parseInt("010" ) = 8.
Marsh Posté le 29-07-2003 à 16:38:30
youdontcare a écrit : De l'octal. parseInt("010" ) = 8. |
Marsh Posté le 29-07-2003 à 14:12:04
'Lut
je souhaiterais verifier un champ de mon formulaire pour qu'il ne contienne qu'un nombre entier
g utilise c 2 facons
var RegExp3=/^[1-9]+[0]*$/ ==> post le formulaire si je saisi 3.2
var RegExp3=/(^.-?\d\d*$)/ ==> ne post dans aucun cas
et je test comme ceci
if(RegExp3.test(Formulaire.Email.value)==null)
{
alert("Veuillez saisir une valeur entière pour la quantité" );
return false;
}
return true;
Est ce que qqn saurais comment verifier si ma quantite est un entier ??
Merci