Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1407 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [JS] Probleme de RegExp

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JS] Probleme de RegExp

n°470924
Juntao2k2
Posté le 29-07-2003 à 14:12:04  profilanswer
 

'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

mood
Publicité
Posté le 29-07-2003 à 14:12:04  profilanswer
 

n°470946
anapajari
s/travail/glanding on hfr/gs;
Posté le 29-07-2003 à 14:24:47  profilanswer
 

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
n°470951
Juntao2k2
Posté le 29-07-2003 à 14:29:11  profilanswer
 

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
n°470955
anapajari
s/travail/glanding on hfr/gs;
Posté le 29-07-2003 à 14:32:14  profilanswer
 

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.

n°470963
Juntao2k2
Posté le 29-07-2003 à 14:42:38  profilanswer
 

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

n°470965
Mara's dad
Yes I can !
Posté le 29-07-2003 à 14:46:29  profilanswer
 

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é.
n°470966
Juntao2k2
Posté le 29-07-2003 à 14:48:00  profilanswer
 

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

n°470974
anapajari
s/travail/glanding on hfr/gs;
Posté le 29-07-2003 à 14:52:27  profilanswer
 

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.

n°470984
Juntao2k2
Posté le 29-07-2003 à 15:02:07  profilanswer
 

@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
n°470986
Juntao2k2
Posté le 29-07-2003 à 15:02:25  profilanswer
 

:bounce:


Message édité par Juntao2k2 le 29-07-2003 à 15:15:19
mood
Publicité
Posté le 29-07-2003 à 15:02:25  profilanswer
 

n°470990
Juntao2k2
Posté le 29-07-2003 à 15:05:12  profilanswer
 

c du delire, avec parseInt aussi il rentre quand meme dans le if  :??:  :??:
la j'avoue que je vois po pq

n°470993
Mara's dad
Yes I can !
Posté le 29-07-2003 à 15:07:24  profilanswer
 

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é.
n°471010
Juntao2k2
Posté le 29-07-2003 à 15:16:05  profilanswer
 

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

n°471013
anapajari
s/travail/glanding on hfr/gs;
Posté le 29-07-2003 à 15:16:46  profilanswer
 

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
n°471033
walli
Posté le 29-07-2003 à 15:22:54  profilanswer
 

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 :
n°471062
Juntao2k2
Posté le 29-07-2003 à 15:30:01  profilanswer
 

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

n°471086
Mara's dad
Yes I can !
Posté le 29-07-2003 à 15:44:36  profilanswer
 

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é.
n°471095
anapajari
s/travail/glanding on hfr/gs;
Posté le 29-07-2003 à 15:51:00  profilanswer
 

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

n°471117
Mara's dad
Yes I can !
Posté le 29-07-2003 à 16:01:28  profilanswer
 

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é.
n°471120
Juntao2k2
Posté le 29-07-2003 à 16:01:49  profilanswer
 

pq floor retournerais NaN dans les 2 cas ??

n°471135
anapajari
s/travail/glanding on hfr/gs;
Posté le 29-07-2003 à 16:11:02  profilanswer
 


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
n°471139
Mara's dad
Yes I can !
Posté le 29-07-2003 à 16:13:53  profilanswer
 

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é.
n°471145
Juntao2k2
Posté le 29-07-2003 à 16:16:43  profilanswer
 

oki la g bien compris :)

n°471170
youdontcar​e
Posté le 29-07-2003 à 16:34:48  profilanswer
 

Mara's dad a écrit :

comme çà commence par un 0, il considère que c'est du binnaire.

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

n°471178
Mara's dad
Yes I can !
Posté le 29-07-2003 à 16:38:30  profilanswer
 

youdontcare a écrit :

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


 :jap:


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [JS] Probleme de RegExp

 

Sujets relatifs
problème avec array();[vb6] probleme avec un commondialog
[JS] problème avec les expressions régulièresProbleme de config Apache (recup variable)
Gros problème de lenteur inexplicable :(Problème avec une Extension Shell Windows
problème de fichier .htaccessProblème en upgradant à mysql 4.0.14!
[C]Probleme de char et stringProbleme avec mon fichier .htaccess
Plus de sujets relatifs à : [JS] Probleme de RegExp


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR