[JS] Probleme de RegExp

Probleme de RegExp [JS] - HTML/CSS - Programmation

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

Reply

Marsh Posté le 29-07-2003 à 14:12:04   

Reply

Marsh Posté le 29-07-2003 à 14:24:47    

comment faire la même chose en beaucoup moins compliqué:

Code :
  1. if ( Math.floor( Formulaire.Email.value) != Formulaire.Email.value)
  2. {
  3.    alert("Veuillez saisir une valeur entière pour la quantité" );
  4.    return false;
  5. }
  6. return true;


 
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 ]


Message édité par anapajari le 29-07-2003 à 14:29:38
Reply

Marsh Posté le 29-07-2003 à 14:29:11    

V test, merci pour ton aide
 
ta technique est bcp plus simple que les RegExp :) :)
 


Message édité par Juntao2k2 le 29-07-2003 à 14:39:49
Reply

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.

Reply

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 ??

Reply

Marsh Posté le 29-07-2003 à 14:46:29    

Y'a parseInt() qu'est fait pour çà.
 

Code :
  1. if( parseInt( Formulaire.Email.value) != Formulaire.Email.value )
  2. {
  3.    alert("Veuillez saisir une valeur entière pour la quantité" );
  4.    return false;
  5. }
  6. return true;


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 29-07-2003 à 14:48:00    

oui gv regarde mais je voyais po comment l'utiliser
 
merci pour cette solution :)

Reply

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.

Reply

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 ??


Message édité par Juntao2k2 le 29-07-2003 à 15:14:55
Reply

Marsh Posté le 29-07-2003 à 15:02:25    

:bounce:


Message édité par Juntao2k2 le 29-07-2003 à 15:15:19
Reply

Marsh Posté le 29-07-2003 à 15:02:25   

Reply

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

Reply

Marsh Posté le 29-07-2003 à 15:07:24    

C'est normal, la défition complète de parseInt est :  
 

Citation :

parseInt(aNumericString, aRadixValue)
The parseInt() function produces an integer value dictated by interpreting the string argument according to the specified radix. It can happily cope with hexadecimal values specified with the leading 0x or 0X notation. During conversion parseInt() will remove any leading whitespace characters. You don't need to do that to the string before parsing it.
 
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.
 
Typical radix values are:
 
 
2 - Binary
 
8 - Octal
 
10 - Decimal
 
16 - Hexadecimal
 
The result of this function call is an integer value, unless the string cannot be resolved to a meaningful value in which case NaN is returned instead.


 
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 ) :sol:
 
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 :D


Message édité par Mara's dad le 29-07-2003 à 15:09:01

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 29-07-2003 à 15:16:05    

Merci bcp a tous les 2 pour votre aide
 
 :jap:

Reply

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?


Message édité par anapajari le 29-07-2003 à 15:20:46
Reply

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 :  
 

Citation :

parseInt(aNumericString, aRadixValue)
The parseInt() function produces an integer value dictated by interpreting the string argument according to the specified radix. It can happily cope with hexadecimal values specified with the leading 0x or 0X notation. During conversion parseInt() will remove any leading whitespace characters. You don't need to do that to the string before parsing it.
 
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.
 
Typical radix values are:
 
 
2 - Binary
 
8 - Octal
 
10 - Decimal
 
16 - Hexadecimal
 
The result of this function call is an integer value, unless the string cannot be resolved to a meaningful value in which case NaN is returned instead.


 
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 ) :sol:
 
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 :D


 
[:gratgrat] tu viens de mettre le doigt sur un problème que je me suis posé il y a de ça plusieurs mois !!
 [:keyzer93]


Message édité par walli le 29-07-2003 à 15:25:25

---------------
NP :
Reply

Marsh Posté le 29-07-2003 à 15:30:01    

g trouve pq ca deconnait, ct une erreur de ma part

Reply

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.
En plus si jamais le champs est 134OFDE36 est bien parseInt va te retourner 134 ...


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.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

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...

Reply

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.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 29-07-2003 à 16:01:49    

pq floor retournerais NaN dans les 2 cas ??

Reply

Marsh Posté le 29-07-2003 à 16:11:02    


Et mais :kaola:  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.


Message édité par anapajari le 29-07-2003 à 16:13:30
Reply

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 !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 29-07-2003 à 16:16:43    

oki la g bien compris :)

Reply

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.

Reply

Marsh Posté le 29-07-2003 à 16:38:30    

youdontcare a écrit :

De l'octal. parseInt("010" ) = 8.


 :jap:


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed