Question sur verification de nombres (formulaire)

Eléphant du PHP | 398 Messages

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
Modifié en dernier par BaLiSTiK le 29 avr. 2008, 15:26, modifié 3 fois.
----------------------------------------------------------------------------------
https://astro-otter.space - Discover wonders and mysteries of Universe

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

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() :) )

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 398 Messages

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.
----------------------------------------------------------------------------------
https://astro-otter.space - Discover wonders and mysteries of Universe

Mammouth du PHP | 19672 Messages

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>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 398 Messages

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 :)
----------------------------------------------------------------------------------
https://astro-otter.space - Discover wonders and mysteries of Universe

Mammouth du PHP | 19672 Messages

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 398 Messages

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; }
----------------------------------------------------------------------------------
https://astro-otter.space - Discover wonders and mysteries of Universe

Mammouth du PHP | 19672 Messages

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 398 Messages

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 ;)
----------------------------------------------------------------------------------
https://astro-otter.space - Discover wonders and mysteries of Universe