Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comment interdire les date dans un formulaire

Sujet résolu
    2 janvier 2009 à 13:31:54

    Bonjour,
    je voudrait qu'on ne puisse pas mettre de date dans une case de mon formulaire mais qu'on puisse quand même mettre des nombre. En gros je veux interdire que 4 chiffre ce suive mais je ne sais pas comment faire.

    Pour l'instant mon code javascript ressemble a sa:
    <script language="JavaScript">
    
    function verifSelection() {
    
    if (document.mail_form.zone_email1.value == "") {
    alert("Veulliez saisir un titre")
    return false
    }
    
    invalidChars = " /:,;'"
    
    for (i=0; i < invalidChars.length; i++) {	// does it contain any invalid characters?
    badChar = invalidChars.charAt(i)
    
    if (document.mail_form.zone_email1.value.indexOf(badChar,0) > -1) {
    alert("Votre Titre contient des caractères invalides. Veuillez vérifier.")
    document.mail_form.zone_email1.focus()
    return false
    }
    }
    
    } // Fin de la fonction
    </script>
    


    Merci d'avance pour vos réponses
    • Partager sur Facebook
    • Partager sur Twitter
      2 janvier 2009 à 14:29:07

      Tu veux faire quoi ? Interdire de mettre plus de 3 chiffres ? Dans ce cas pas besoin d'utiliser de Javascript, une balise HTML suffit :

      <input type="text" maxlength="3" />
      
      • Partager sur Facebook
      • Partager sur Twitter
        2 janvier 2009 à 15:18:39

        Oui je veux Interdire de mettre plus de 3 chiffres mais vu que cet case est un case de titre je veux pouvoir écrire plus de 3 lettre.
        • Partager sur Facebook
        • Partager sur Twitter
          2 janvier 2009 à 15:46:02

          Ah d'accord ! Eh bien dans ce cas tu vérifies tout d'abord si le champ contient un nombre à l'aide de la fonction isNaN(), si c'est le cas tu le transformes en chaîne de caractères et si c'est trop long tu tronques avec la méthode substr(). Après troncature, tu n'auras plus qu'à faire un parseInt() et écrire ce résultat dans le champ de texte ;) .
          • Partager sur Facebook
          • Partager sur Twitter
            2 janvier 2009 à 17:19:45

            Le javascript c'est vraiment mon truc et la j'ai pas trop comprit comment fallait faire.
            • Partager sur Facebook
            • Partager sur Twitter
              2 janvier 2009 à 17:52:42

              J'ai fais ceci mais ça demande à être amélioré (je dois partir donc j'ai fait ça à l'arrache histoire de te montrer au moins le principe ;) ) :

              function verif(target) {
                if(!isNaN(target.value)) {
                  var nbr = target.value + '';
                  
                  if(nbr.length > 3) {
                    target.value = nbr.substr(0, 3);
                  }
                }
              }
              


              <input type="text" onkeyup="verif(this);" />
              
              • Partager sur Facebook
              • Partager sur Twitter
                2 janvier 2009 à 18:29:18

                je pense pas que c'est ce qu'il lui faut... il veut pouvoir mettre 3chiffres + plein de lettres...
                donc ça serait plutôt une boucle qui compte les chiffres en prenant les caractères 1 par 1 et qui rajoute les caractères les une à la suite des autres tan que le nombre de chiffres<4

                function verif(cible)
                {
                	var value=cible.value;
                	var chaine = new Array();
                	chaine = value.split('');
                	var nbchiffres=0;
                	var chaineout='';
                	for(var i=0;i<chaine.length;i++)
                	{
                		if(!isNaN(chaine[i]))
                		{
                			nbchiffres++;
                			if(nbchiffres>3)
                			{
                				cible.value=chaineout;
                				return chaineout;
                			}
                		}
                		chaineout=chaineout+chaine[i];
                	}
                }
                


                code utilisé pour tester:
                <html><head>
                <script type="text/javascript">
                function verif(cible)
                {
                	var value=cible.value;
                	var chaine = new Array();
                	chaine = value.split('');
                	var nbchiffres=0;
                	var chaineout='';
                	for(var i=0;i<chaine.length;i++)
                	{
                		if(!isNaN(chaine[i]))
                		{
                			nbchiffres++;
                			if(nbchiffres>3)
                			{
                				cible.value=chaineout;
                				return chaineout;
                			}
                		}
                		chaineout=chaineout+chaine[i];
                	}
                }
                </script>
                </head><body>
                <input type="text" onKeyUp="verif(this)" />
                </body></html>
                
                • Partager sur Facebook
                • Partager sur Twitter
                  2 janvier 2009 à 19:30:17

                  Ou comme ça :
                  function verif(oElement){
                  	if(typeof oElement.oldValue == "undefined"){
                  		oElement.oldValue = oElement.value;
                  		var sNbrNumber = oElement.oldValue.replace(/[^\d]/g, "");
                  		if(sNbrNumber.length > 3){
                  			oElement.value = "";
                  			oElement.oldValue = "";
                  		}
                  	}
                  	else {
                  		var sValue = oElement.value;
                  		var sNbrNumber = sValue.replace(/[^\d]/g, "");
                  		if(sNbrNumber.length > 3) {
                  			oElement.value = oElement.oldValue;
                  		}
                  		oElement.oldValue = oElement.value;
                  	}
                  }
                  

                  (Avec le même html : <input type="text" onkeyup="verif(this)" /> )
                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 janvier 2009 à 19:42:28

                    Merci pour ces réponses c'est super sympa mais quelle est la meilleur solution entre les deux derniére??
                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 janvier 2009 à 19:47:59

                      la mienne forcément!

                      ... non sincèrement je comprend pas celle de timot...
                      donc si elle marche (pas sûr) elle est peut-être mieu...

                      si elle marche, la seule différence va être le temps d'execution... et là je ne sais pas du tout... il utilise des Regex et moi des boucles... mais sa solution doit être un peu plus rapide...
                      EDIT
                      {
                      en fait la sienne marche (enfin le code est compréhensible pour moi :p et j'ai pas trouvé d'erreures

                      par contre je pense qu'elle peut être améliorée ... en définissant les variables avant la fonction... ce qui permet de virer le if et de diviser par 2 le nombre de lignes de code...

                      (surtout que le premier if ne sert à rien... s'il lance la fonction pour la première fois, il a 1 caractère.. donc il ne peut pas avoir plus de 3 chiffres... sauf si le input est préremplis ... donc ton if servirait à le vider... mais ça voudrait dire que la valeur par défault devrait conprendre plus de 3 chiffres... c'est contraignant...
                      bref les 2 marchent, la mienne est parfaite ^^ et celle de Timot améliorable mais une fois améliorée sera mieu que la mienne en temps d'execution :^p
                      }
                      • Partager sur Facebook
                      • Partager sur Twitter
                        2 janvier 2009 à 19:58:24

                        celle de Timot "améliorée" (il se peut que ça rallentisse le temps d'execution... vu que ça redéfinit la variable a chaque fois au lieu de regarder si elle est définie et de la définir si elle ne l'est pas...

                        var oldValue='';
                        function verif(oElement){
                        var sValue = oElement.value;
                        var sNbrNumber = sValue.replace(/[^\d]/g, "");
                        if(sNbrNumber.length > 3) {
                        oElement.value = oldValue;
                        }
                        oldValue = '';
                        }
                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 janvier 2009 à 20:06:10

                          Citation : xavierm02

                          celle de Timot "améliorée" (il se peut que ça rallentisse le temps d'execution... vu que ça redéfinit la variable a chaque fois au lieu de regarder si elle est définie et de la définir si elle ne l'est pas...

                          var oldValue='';
                          function verif(oElement){
                          var sValue = oElement.value;
                          var sNbrNumber = sValue.replace(/[^\d]/g, "");
                          if(sNbrNumber.length > 3) {
                          oElement.value = oldValue;
                          }
                          oldValue = '';
                          }


                          Sauf que la tienne est moins bienne car que tu ne gère qu'un seul élément, c'est pour ça que j'utilise this, pour que je puisse faire cette méthode a plusieurs objet différent.
                          Et l'initialisation est géré juste au cas ou il y aurait plus de 3 nombre au premier appel de la fonction.
                          Peut être que comme ça, c'est encore mieux :
                          function verif(oElement){
                          	if(typeof oElement.oldValue == "undefined"){
                          		oElement.oldValue = "";
                          	}
                          	var sValue = oElement.value;
                          	var sNbrNumber = sValue.replace(/[^\d]/g, "");
                          	if(sNbrNumber.length > 3) {
                          		oElement.value = oElement.oldValue;
                          	}
                          	else {
                          		oElement.oldValue = oElement.value;
                          	}
                          }
                          

                          Sauf que ca ne gére pas de valeur initiale ;) .
                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 janvier 2009 à 20:08:27

                            Je veux pas faire mon rabat-joie mais vos fonctions font exactement la même chose que la mienne sauf que moi je n'utilise ni Regex, ni boucle donc l'exécution est plus rapide.

                            Citation : xavierm02

                            je pense pas que c'est ce qu'il lui faut... il veut pouvoir mettre 3chiffres + plein de lettres...
                            donc ça serait plutôt une boucle qui compte les chiffres en prenant les caractères 1 par 1 et qui rajoute les caractères les une à la suite des autres tan que le nombre de chiffres<4


                            Euh... Ouais, ma fonction fait exactement ça quoi :D ! On peut mettre 3 chiffres + des lettres...

                            @Timot -> J'ai remarqué que tu as tendance à utiliser les Regex à toutes les sauces, je te le déconseille, ça bouffe énormément alors qu'il y a beaucoup plus simple et moins gourmand...
                            • Partager sur Facebook
                            • Partager sur Twitter
                              2 janvier 2009 à 20:11:57

                              Et comment tu fais pour tester si ya 3 nombres dans un chaine de caractères sans passer par les regex toi ?
                              Et ma fonction ne fait pas du tout pareil que la sienne, vu qu'elle coupe la chaine de caractère au 3eme nombre, alors que la mienne sauvegarde l'ancienne valeur, et remplace la nouvelle par l'ancienne s'il y a plus de 3 nombres.
                              Donc si tu as a1a2a3zeze et que tu rajoute un 4 la : a1a2a3ze4ze
                              Sa fonction donnera : a1a2a3ze
                              Ma fonction donnera : a1a2a3zeze
                              Donc, pas pareil ;) .
                              • Partager sur Facebook
                              • Partager sur Twitter
                                2 janvier 2009 à 20:17:37

                                Citation : Nesquik69

                                Je veux pas faire mon rabat-joie mais vos fonctions font exactement la même chose que la mienne sauf que moi je n'utilise ni Regex, ni boucle donc l'exécution est plus rapide.


                                On dirait un concours :-°
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  2 janvier 2009 à 20:31:50

                                  Citation : Nesquik69

                                  Je veux pas faire mon rabat-joie mais vos fonctions font exactement la même chose que la mienne sauf que moi je n'utilise ni Regex, ni boucle donc l'exécution est plus rapide.

                                  Citation : xavierm02

                                  je pense pas que c'est ce qu'il lui faut... il veut pouvoir mettre 3chiffres + plein de lettres...
                                  donc ça serait plutôt une boucle qui compte les chiffres en prenant les caractères 1 par 1 et qui rajoute les caractères les une à la suite des autres tan que le nombre de chiffres<4


                                  Euh... Ouais, ma fonction fait exactement ça quoi :D ! On peut mettre 3 chiffres + des lettres...

                                  @Timot -> J'ai remarqué que tu as tendance à utiliser les Regex à toutes les sauces, je te le déconseille, ça bouffe énormément alors qu'il y a beaucoup plus simple et moins gourmand...




                                  bah alors je comprend pas...
                                  function verif(target) {
                                    if(!isNaN(target.value)) {//si la valeur du truk est un nombre... donc il suffit d'une lettre pour que ça y fasse pas... non?
                                      var nbr = target.value + '';//je vois pas l'interret de cette variable... ni du +''
                                      
                                      if(nbr.length > 3) {//si j'ai bien suivi, la tu vérifie si une chaine composée SEULEMENT de chiffres eest plus longue que 3...
                                        target.value = nbr.substr(0, 3);// donc sic 'est plus lnog que 3, tu remet les 3 premiers...
                                      }
                                    }
                                  }
                                  

                                  conclusion : ta fo,ction fait pas ce qui est demandé... elle ne permet de mettre que des chiffres...
                                  je me trompe?

                                  Citation : Timot

                                  Et comment tu fais pour tester si ya 3 nombres dans un chaine de caractères sans passer par les regex toi ?
                                  Et ma fonction ne fait pas du tout pareil que la sienne, vu qu'elle coupe la chaine de caractère au 3eme nombre, alors que la mienne sauvegarde l'ancienne valeur, et remplace la nouvelle par l'ancienne s'il y a plus de 3 nombres.
                                  Donc si tu as a1a2a3zeze et que tu rajoute un 4 la : a1a2a3ze4ze
                                  Sa fonction donnera : a1a2a3ze
                                  Ma fonction donnera : a1a2a3zeze
                                  Donc, pas pareil .


                                  je pense pas...
                                  quand je trouve un nombre, si c'est > 3 alors je met pas... donc je met tous les caractères avant le 4ème nombre... après peut-être que je me trompe...


                                  Je vais gagner le concours! :lol:
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    2 janvier 2009 à 20:37:30

                                    Ah, j'ai mal lu, tu ne veux pas qu'on puisse mettre 4 nombres d'affilés, alors, faut plutot faire ça :
                                    function verif(oElement){
                                    	if(typeof oElement.oldValue == "undefined"){
                                    		oElement.oldValue = "";
                                    	}
                                    	if(/[\d]{4,}/g.test(oElement.value)) {
                                    		oElement.value = oElement.oldValue;
                                    	}
                                    	else {
                                    		oElement.oldValue = oElement.value;
                                    	}
                                    }
                                    


                                    Euh moi non plus, je n'ai pas compris comment est sensé marcher ta fonction nesquik ?
                                    Et je te le redis xavierm, ta fonction s'arrete des quelle est arrivée à 4 caractères et fait un return, donc si ya des caractères après, beh ils ne sont pas renvoyés.
                                    De toute manière, on s'était tous gouré, car ce qu'il voulait ne pas pouvoir mettre plus de 4 chiffres à la suite ;) .
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      2 janvier 2009 à 20:42:39

                                      ah ui je voit ce que tu veux dire... sauf que ça marche quand même ma focntion... vu que je le laisse pas mettre le 4eme nombre :p il peut écrire après ... et le return est la juste pour décorer... enfin pour pas que la fonction continue...
                                      éssaye... par contre les champs préremplis ma focntion les gère pas :(
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        2 janvier 2009 à 20:47:38

                                        Je te le redis, ta fonction ne gère pas les chiffres qu'il y a apres les 4 nombres.
                                        C'est parce que tu as oublié qu'on est pas obligé d'écrire du texte à la fin d'un input, comme je te le redis, si j'ai :
                                        abc123def| (| représente le curseur)
                                        Et que je rajoute un 4 la :
                                        abc123|def
                                        abc1234|def
                                        Beh ta fonction va couper au 4, et renvoyer abc123 au lieu de abc123def.
                                        Et pis, ca gère 4 nombres dans toute la chaine et pas d'affilé comme il demande ;) .
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          2 janvier 2009 à 21:10:46

                                          Mouais, il semblerait que je me sois planté sur un point et vous aussi, notre cher "client" souhaite ne pas voir plus de 4 chiffres se suivrent or vous, vous interdisez carrément plus de 4 chiffres où qu'ils soient, même si ceux-ci sont séparés pars des lettres o_O . Je vous rappelle qu'il veut interdire les dates et non pas interdire de mettre plus de 4 chiffres dans une chaîne.

                                          Bref, en fait ma fonction empêche 4 chiffres de se suivre mais seulement au début, en clair mais fonction autorise 123 ainsi que 123abc mais pas ab1234c (c'est sur ce dernier point que ça foire en fait).

                                          Et xavierm02 tu n'as pas compris grand chose à mon code à priori, je t'explique ^^ :

                                          function verif(target) {
                                            if(!isNaN(target.value)) { // C'est là que ma fonction foire, elle repère les chiffres au début mais pas si ils sont placés en plein milieu d'une chaîne, sinon ça marche très bien avec des chiffres au début et des lettres après.
                                              var nbr = target.value + ''; // Ça sert à récupérer le nombre sous forme de chaîne pour l'étape suivante.
                                              
                                              if(nbr.length > 3) { // Vu que maintenant chaque chiffre équivaut à un caractère grâce à la ligne précédente, il me suffit seulement de calculer le nombre de caractères écrits.
                                                target.value = nbr.substr(0, 3); // Tu as tout compris, si c'est plus long que 3 alors je remets les 3 premiers chiffres.
                                              }
                                            }
                                          }
                                          


                                          Et aussi, plutôt que de me dire : "ça risque de pas marcher toussa...". Ben il vous suffit d'essayer ! Ça prend pas 3 ans de mettre une balise script, le code Javascript et la ligne HTML... Je sais pas pour vous mais je teste toujours mes codes avant de les montrer hein :-° .

                                          Bref, mavrik, si tu souhaites interdire les chiffres au début de la chaîne alors ma fonction suffit, si tu souhaites les interdire en plein milieu d'une chaîne alors prend une des deux autres fonctions, mais il va falloir qu'ils les modifient car leurs fonctions ne permettent pas de mettre plus de 4 chiffres même si ceux-ci sont séparés par des lettres ;) .
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            2 janvier 2009 à 21:16:01

                                            Euh, nesquik :

                                            Citation : Timot

                                            Ah, j'ai mal lu, tu ne veux pas qu'on puisse mettre 4 nombres d'affilés, alors, faut plutot faire ça :

                                            function verif(oElement){
                                            	if(typeof oElement.oldValue == "undefined"){
                                            		oElement.oldValue = "";
                                            	}
                                            	if(/[\d]{4,}/g.test(oElement.value)) {
                                            		oElement.value = oElement.oldValue;
                                            	}
                                            	else {
                                            		oElement.oldValue = oElement.value;
                                            	}
                                            }
                                            



                                            Euh moi non plus, je n'ai pas compris comment est sensé marcher ta fonction nesquik ?
                                            Et je te le redis xavierm, ta fonction s'arrete des quelle est arrivée à 4 caractères et fait un return, donc si ya des caractères après, beh ils ne sont pas renvoyés.
                                            De toute manière, on s'était tous gouré, car ce qu'il voulait ne pas pouvoir mettre plus de 4 chiffres à la suite ;) .

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              2 janvier 2009 à 21:19:35

                                              Ahem, pardon :D !

                                              Bon, sinon vous avez compris le fonctionnement de ma fonction ? Elle fonctionne très bien sauf qu'elle ne sait pas interdire 4 chiffres en plein milieu ou à la fin d'une chaîne, s'too. En fait j'avais pas imaginé que mavrik pourrait vouloir interdire une date en plein milieu d'une chaîne :-° .
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                2 janvier 2009 à 21:21:25

                                                j'ai compris le pb de ma fonction: le curseur..; mais si on par d'un input vide et qu'on ne touche pas a la souris elle marche :p mais ne fait pas ce qu'il veut...

                                                Nesquik69:si on met 1234abc ça rend 123... ta fonction est encore pire que la mienne :p
                                                et sinon il existe .toString si je ne m'abuse... après peut être que ça prend plus de ressource... mais ça m'étonerais... quand tu ajoute, ça doit : regarder si c'est un string, sinon appliquer tostring et ensuite ajouter... tu perd au moin 0,00000021s!!!!! c'est énorme ^^
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  2 janvier 2009 à 21:25:30

                                                  Citation : xavierm02

                                                  Nesquik69:si on met 1234abc ça rend 123... ta fonction est encore pire que la mienne :p


                                                  À ça je réponds :

                                                  Citation : mavrik

                                                  En gros je veux interdire que 4 chiffres se suivent



                                                  Ma fonction empêchent bien que 4 chiffres se suivent non :-° ?

                                                  Bon, en fait je viens de penser à un truc, si on fait un copier/coller alors ça va foirer, raaah §
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    2 janvier 2009 à 21:28:14

                                                    et si on bouge le curseur après avoir écris les lettres aussi :p
                                                    vainqueur : Timot!
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      2 janvier 2009 à 21:29:44

                                                      Citation : Nesquik69

                                                      Citation : xavierm02

                                                      Nesquik69:si on met 1234abc ça rend 123... ta fonction est encore pire que la mienne :p


                                                      À ça je réponds :

                                                      Citation : mavrik

                                                      En gros je veux interdire que 4 chiffres se suivent



                                                      Ma fonction empêchent bien que 4 chiffres se suivent non :-° ?

                                                      Bon, en fait je viens de penser à un truc, si on fait un copier/coller alors ça va foirer, raaah §


                                                      C'est bien pour ça que ma fonction intervient avec sauvegarde des anciennes valeurs, comme ça, si la nouvelle valeur ne respecte pas la condition, on remet l'ancienne valeur tout simplement, même avec copier/coller ;) .

                                                      :D Merci merci ^^ .
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        2 janvier 2009 à 21:31:44

                                                        Bravo Timot, vous avez gagné le concours, vous repartez donc avec une boîte de jeu et le vrai perdant (c'est-à-dire, moi :-° ) s'incline devant votre supériorité qui reste encore à être prouvée !
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          2 janvier 2009 à 22:49:24

                                                          Merci beaucoup pour toute vos réponses qui on complétement réussie a resoudre mon probléme.
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            2 janvier 2009 à 23:00:58

                                                            bah click sur "indiquer que mon problème est résolu" en vas de la page
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            Comment interdire les date dans un formulaire

                                                            × 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