Partage
  • Partager sur Facebook
  • Partager sur Twitter

Vérification formulaire :Valeur entière positive

Valeur entière positive

Sujet résolu
    30 septembre 2016 à 14:11:41

    Bonjour !

    Alors, je sais que mon problème est vieux comme le monde et j'ai d'ailleurs vu plein de discussions relatives à mon souci sur le net.

    Je vais pourtant me risquer à poser mon problème ici, étant donné que je ne m'y connait pas trop en JS:

    J'ai copié sur un site, le script d'une fonction JS permettant de vérifier qu'une valeur saisie dans un formulaire est un entier positif. Elle marche (affiche un message d'erreur grâce à un alert()) si on entre un nombre négatif (-1 par exemple ) mais n'affiche pas le message si on entre un caractère comme a, $,k...

    J'ai alors modifié le script de la fonction JS afin qu'elle affiche le message d'erreur si on entre un caractère autre qu'un nombre :

    var chKZ = 1;
    				for(i=0;i<document.forms['formulaire_de_vente'].elements['prix'].value.length;i++){
    					if(document.forms['formulaire_de_vente'].elements['prix'].value.charAt(i)<"0"|| is_nan(document.forms['formulaire_de_vente'].elements['prix'].value.charAt(i)){
    						chKZ = -1;
    						if(chKZ == -1){
    							alert("Cette valeur n'est pas valide!");
    							document.forms['formulaire_de_vente'].elements['prix'].style.backgroundColor ="#fba";
    							return false;

    La ligne du isNan (celle que j'ai ajouté) semble n'être pas prise en compte...

    Merci d'avance pour votre aide!

    • Partager sur Facebook
    • Partager sur Twitter
    You are now about to witness the strength of street knowledge
    Anonyme
      30 septembre 2016 à 14:31:24

      et ya quoi dans is_nan() ?

      EDIT !!

      chKZ = -1;
      if(chKZ == -1){
      

       Il manque clairement un truc ici, ton if sera toujours vrai

      -
      Edité par Anonyme 30 septembre 2016 à 14:32:49

      • Partager sur Facebook
      • Partager sur Twitter
        30 septembre 2016 à 14:35:31

        Salut,

        En JS c'est isNaN là tu as mis is_nan qui est la fonction pour le PHP.

        En gros, ta fonction sera :

        function testNumber(nombre){
            if(nombre.value < 0 || isNaN(nombre)){
                alert("Cette valeur n'est pas valide");
                return false;
            }
        }
        
        //A utiliser comme ca:
        
        
        for(i=0;i<document.forms['formulaire_de_vente'].elements['prix'].value.length;i++){
                            if(testNumber(document.forms['formulaire_de_vente'].elements['prix'].value.charAt(i)) == false){
                                    document.forms['formulaire_de_vente'].elements['prix'].style.backgroundColor ="#fba";
                                    return false;



        -
        Edité par bryan33000 30 septembre 2016 à 14:36:06

        • Partager sur Facebook
        • Partager sur Twitter
        Quand tu ne sais pas, Google reste ton meilleur ami ! ;)
          30 septembre 2016 à 15:23:35

          Bonjour.

          Sauf que pour la valeur "-5", pour le 1er caractère "-", testNumber("-") va tester si "-"<0.
          Or, dans la table ASCII, ce caractère est un nombre positif (45 pour être précis).
          Ainsi testNumber() retournera toujours vrai.
          Il faudrait donc tester le caractère entre 48 et 57 !

          Sinon, pour faire ça proprement, il existe les regex !
          [0-9]*

          Initialement, l'idée qui m'était venu à l'esprit est de convertir le string en int.
          Dans la majorité des langages, lorsque la valeur est incorrecte, cela lève une erreur (ou retournerait NaN en JavaScript).
          Parce que je ne maîtrise pas JavaScript, je ne sais pas si cela se fait nativement.

          • Partager sur Facebook
          • Partager sur Twitter
          Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
            30 septembre 2016 à 15:34:03

            Tu m'as mis un petit doute alors je suis allé tester :)

            https://jsfiddle.net/yLvhgLwm/

            Je pensais qu'un input text te donnerait raison et un input number me donnerait raison. Au quel cas un petit parseInt() aurait résolu le problème

            Eh bien figure toi que non, en JS le "-" est interprété comme "moins" même sans le parseInt.

            Du coup, dans le cas d'un input text ou number, la fonction retourne le résultat attendu.

            Après, je suis assez d'accord, une regex serait plus propre pour ce genre de vérifications, mais je n'y ai même pas pensé sur le moment !

            • Partager sur Facebook
            • Partager sur Twitter
            Quand tu ne sais pas, Google reste ton meilleur ami ! ;)
              30 septembre 2016 à 15:53:25

              Bonjour thibaultleveau, bryan33000 et Puinget62

              @ thibaultleveau : La valeur de la variable chKZ est initialement de 1. Elle devient -1 uniquement si la condition:

              document.forms['formulaire_de_vente'].elements['prix'].value.charAt(i)<"0"|| is_nan(document.forms['formulaire_de_vente'].elements['prix'].value.charAt(i)

              est vrai. Néanmoins j'avoue qu'on n'a pas vraiment besoin de tout ça...

              @ bryan33000 : Yeeeees ça marche ! Mais uniquement quand j'écris "0" au lieu de 0, dans la fonction.

              @ Puinget62 : bryan33000 est dans le vrai.Il n'y a aucun souci avec les valeurs négatives (j'ai fait les tests)

              Un grand merci à vous 3.

              -
              Edité par Dr_strange 30 septembre 2016 à 15:55:25

              • Partager sur Facebook
              • Partager sur Twitter
              You are now about to witness the strength of street knowledge
              Anonyme
                30 septembre 2016 à 16:18:17

                Justement non, t'as un problème d'accolades :p
                • Partager sur Facebook
                • Partager sur Twitter
                  30 septembre 2016 à 16:57:15

                  Attention sur quoi est-ce que l'on test :

                  • plus haut une boucle for sur les caractères était utilisée : donc la fonction est appelée sur le caractère "-"
                  • dans ton exemple bryan33000 tu appelles la fonction sur la valeur complète : donc la fonction appelée sur la chaîne "-42" retournera bien false par "-42"<0 vaut bien true

                  Après second test sur les caractères :

                  • le test <0 retourne toujours false, que ce soit un nombre ou le signe"-"
                  • mea culpa : je n'avais pas testé ce point précis : isNaN('-') retourne bien true

                  Bref :

                  • Pour la fonction de bryan33000 qui teste la valeur complète, il faut effectivement faire les 2 tests.
                  • Pour la fonction initiale testant chacun des caractères, le test de négation ne sert à rien.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)

                  Vérification formulaire :Valeur entière positive

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown