Question sur verification de nombres (formulaire)

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Question sur verification de nombres (formulaire)

par BaLiSTiK » 05 mai 2008, 11:33

Existe-t'il , à l'instar du site du W3C, une vérification du code JS, comme on peut le faire pour le xHTML ou le CSS ?
Personnellement je n'en connais pas, mais l'utilisation de Aptana Studio peut t'aider pas mal, il y a un validateur intégré qui analyse en temps réel ton code, j'en fais personnellement un usage sans restriction particulière.
Daccord, sinon je m'aide aussi du plug-in Firebug pour MFF. Il m a aidé à trouver les erreurs, sans les regler mais au moins je savais ou elles étaient.

Je met le topic en résolu :).
Thanks ;)

par Cyrano » 30 avr. 2008, 11:36

Existe-t'il , à l'instar du site du W3C, une vérification du code JS, comme on peut le faire pour le xHTML ou le CSS ?
Personnellement je n'en connais pas, mais l'utilisation de Aptana Studio peut t'aider pas mal, il y a un validateur intégré qui analyse en temps réel ton code, j'en fais personnellement un usage sans restriction particulière.

par BaLiSTiK » 30 avr. 2008, 09:37

Daccord, merci pour ces éclaircissement. Si j'ai des verif' de formulaire en JS à faire, j'essaierai d'appliquer ta méthode :).
Existe-t'il , à l'instart du site du W3C, une vérification du code JS, comme on peutle faire pour le xHTML ou le CSS ?

EDIT :
j ai reussi à aussi faire en sorte que les champs vides soit acceptés, c etait pas compliqué certes mais j ai pas mal manipulé de if..else, de && et de || dans tous les sens :D .
le code final :

Code : Tout sélectionner

function verification(){ var oForm = document.forms.frmSol; var exp_reg = new RegExp(/^\d+([.|,]\d+)?$/); var oKsat = oForm.elements.ksat; if((exp_reg.test(oKsat.value) === false) && (oKsat.value != "")){ alert ('Entrez une valeur numerique pour la Conductivité hydraulique à saturation.'); oKsat.focus(); return false; }//fin else //etc... return true; }

par Cyrano » 29 avr. 2008, 20:17

Ok, explications :
- "===" au lieu de "==" : tu attends un booléen, rien d'autre, donc la vérification par une stricte égalité sera plus appropriée;
- Ensuite :

Code : Tout sélectionner

var oForm = document.forms.frmSol; var oKsat = oForm.elements.ksat;
Ça, c'est pour me simplifier la vie. Tu noteras que j'ai mis un "o" en première lettre, "o" comme "objet" : je récupère l'objet sur lequel je veux travailler et à partir de là, j'applique les méthodes disponibles directement.

Donc d'abord le formulaire, et ensuite les éléments de ce formulaire. Si tu observes la suite du code, tu verras qu'en fin de compte, j'en écris moins, par exemple au lieu de mettre "document.frmSol.ksat.focus();", je fais "oKsat.focus();" : ça m'use moins les doigts sur le clavier :mrgreen:
- Et ensuite le getElementById fonctionnerait, mais pour des éléments de formulaire, il est préférable d'utiliser les méthodes propres aux formulaires natives dans JavaScript.

Et tout ceci, c'est de la syntaxe standard ECMAScript (la version W3C du JavaScript et ça fonctionne partout pour autat qu'on utilise un navigateur respectant un tout petit peu les standards.

par BaLiSTiK » 29 avr. 2008, 14:05

Merci pour la correction (les regexp c est pas encore trop mon truc...).
Mais pourrais-tu me dire en quoi l'utilisation de :
var oForm = document.forms.frmSol;
var oKsat = oForm.elements.ksat;
est-elle plus correcte ? c est question d'être plus "standart" ?
Et n'est-il pas mieux d'utiliser par exemple le getElementById ?
Et pourquoi 3 "=" ? Deux ne suffisent pas ?.

Il me faudrait aussi la possibilité de pouvoir laissez des champs vides (avec le script actuel, il accepte pas les champs vides.
Donc en faisant comme ceci :

Code : Tout sélectionner

var oKsat = oForm.elements.ksat; if(oKsat.value == ''){ oKsat.focus(); return true; } else if(exp_reg.test(oKsat.value) === false ){ alert ('Entrez une valeur numerique.'); oKsat.focus(); return false; }
ça passe, mais est-ce que c est propre ?
Merci d'avance :)

par Truc » 29 avr. 2008, 13:51

QUelque soit la méthode, ton expression régulière est fausse et son utilisation n'est pas meilleure.
Ce n'était pas la question alors je n'ai même pas regardé :P 8-|

parseInt() pour des entiers parseFloat() pour les flottants :)

par Cyrano » 29 avr. 2008, 13:33

QUelque soit la méthode, ton expression régulière est fausse et son utilisation n'est pas meilleure. Corrigé :

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <title>Validation numérique.</title> <script type="text/javascript">/* <![CDATA[ */ function verification() { var oForm = document.forms.frmSol; var oKsat = oForm.elements.ksat; var exp_reg = /^\d+([.|,]\d+)?$/; if(exp_reg.test(oKsat.value) === false) { alert ('Entrez une valeur numerique.'); oKsat.focus(); return false; } return true; } /* ]]> */</script> </head> <body> <form method="post" name="frmSol" onsubmit="return verification();"> <p> Ksat : <input type="text" id="ksat" size="10" /><br /> <input type="submit" value="go"> </p> </form> </body> </html>

par BaLiSTiK » 29 avr. 2008, 13:32

Oké merci...bon bah le collegue a raison, j avais opté pour le search().
Et le parseInt() fonctionne't-il aussi avec les chiffres a virgules ? (genre si je rentre 1,5 ou 1.5 ?) Au début j avais pensé à isNan() mais il a l'air de prendre que des entiers.

par Truc » 29 avr. 2008, 13:28

les 2 sont identiques hormis le faite que search() retourne l'index de l'occurrence (si trouvée) et test() renvoie un booleen.

Donc dans le cas d'une vérification d'un nombre test() est parfait... (voire parseInt() :) )

Question sur verification de nombres (formulaire)

par BaLiSTiK » 29 avr. 2008, 12:26

Bonjour,
J ai un tres simple code JS à faire pour verifier si on entre des chiffres dans un formulaire mais avec un collegue on n est pas vraiment d'accord sur la méthode.
Est-ce mieux d'utiliser test() ou search() ? (
Le code :
<html><head>
<script type="text/javascript">
function verification(){
	
	var ksat = document.frmSol.ksat.value;
	var exp_reg = /^\d+([\.|,]\d+){0,1}$/;
	if(exp_reg.test(ksat)){
		alert('Entrer une valeur numerique pour ksat');
		document.frmSol.ksat.focus(); 
		return false;
	}
	
	var ksat = document.frmSol.ksat.value; //le getElementByID ne passe pas ici ??
	if (ksat.search(/^\d+([\.|,]\d+){0,1}$/)){
		alert ('Entrer un caractere numerique ksat.'); 
        document.frmSol.ksat.focus(); 
        return false;
	}
return true
}
</script>
</head>
<body>
<form method="post" name="frmSol" onsubmit="verification();">
Ksat : <input type="text" id="ksat" size="10" /><br />
<input type="submit" value="go">
</form>
</body>
edit : avec le \ devant le point dans la regexp