IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Contrôle valeur numérique isNaN


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Par défaut Contrôle valeur numérique isNaN
    Bonjour.

    En tant que novice du Javascript je me trouves confronté à un nouveau problème :

    J'ai un prompt que je récupère dans une variable "v" comme çà. Je veux que cette valeur soit numérique (décimale ou entière).

    Pour le vérifier je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(isNaN(v)){
       alert("BOUH C'EST PAS BIEN !!!");
    }
    Seulement si je tapes des espaces çà passe, comme si c'était un nombre.

    J'aimerais savoir comment faire pour que justement çà ne passe plus. J'ai essayé le v.replace() pour les espaces mais le souci c'est que si je clique sur le "annuler" du prompt v est à null et j'effectue replace dessus donc mon firebug n'aime pas des masses.

    J'ai pensé à tester la valeur avec un expression régulière mais j'ai peur que cela pose des problèmes au niveau des décimales pour la virgule qui est tantôt un point tantôt une virgule en fonction de la config du pc.

    J'aimerais avoir votre avis et savoir s'il y'a un moyen plus simple de contrôler que c'est un nombre. J'ai cherché sur le net et sur ce forum mais sans succès.

    Merci déjà.

  2. #2
    Membre chevronné Avatar de htr999
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 331
    Par défaut
    RegExp ?.?

  3. #3
    Membre très actif Avatar de Sacha999
    Inscrit en
    Mars 2007
    Messages
    294
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mars 2007
    Messages : 294
    Par défaut
    ca devrait faire l'affaire, ca remplace les espace par la letter 'Y' et donc devien forcement non numerique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if(v == null || v =='' || isNaN(v.replace(/\s/g,'Y'))){
    	   alert("BOUH C'EST PAS BIEN !!!");
    	}

  4. #4
    Membre chevronné Avatar de htr999
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 331
    Par défaut
    pour être sûr:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <head>
    <script>
    function testNumber(num){
    	var pattern = new RegExp("^[0-9]+(\.[0-9]+)?$","g");
    	var result = pattern.test(num);
     
    	if (num.length == 0)
    		document.getElementById("affNum").innerHTML = "";
    	else{
    		if (result)
    			document.getElementById("affNum").innerHTML = "ok";
    		else
    			document.getElementById("affNum").innerHTML = "Not ok";
    	}
     
    	return result;
    }
    </script>
    </head>
     
    <body>
    	<input type="text" onkeyup="testNumber(this.value);" /> <span id="affNum"></span>
    </body>

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Par défaut
    Ok merci bien.
    Je vais essayer tout çà et je vous retiens au courant

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Par défaut
    J'ai essayé la solution de Sacha999, j'obtiens donc dans mon cas, ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    //On lit la premiere valeur tant qu'elle n'est pas numérique
    		do{
    			v1=prompt(msg1);
    			if(v1 =='' || isNaN(v1.replace(/\s/g,'Y'))){
    				alert('Ce champ doit être une valeur numérique');
    			}
    		}while(v1 =='' || isNaN(v1.replace(/\s/g,'Y')));
     
    		//Si la premiere valeur est saisie (pas de clic sur "Annuler" ), on lit la deuxieme valeur
    		if(v1!=null){
    			do{
    				v2=prompt(msg2);
    				if(v2 =='' || isNaN(v2.replace(/\s/g,'Y'))){
    					alert('Ce champ doit être une valeur numérique');
    				}			
    			}while(v2 =='' || isNaN(v2.replace(/\s/g,'Y')));		
    		}
    Tout marche bien mais vu que je suis un peu maniaque, j'ai remarqué que mon deuxième petit problème était toujours là : lorsque je clique sur le bout "Annuler" de la première boîte il m'arrête bien le traitement seulement mon firebug me dit "v1 has no property" (pour le replace). Je pense que c'est normal parce qu'il vaut null mais je ne vois pas comment contourner le problème ?

  7. #7
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    +1 pour la réponse de htr999

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Remplacement d'une valeur numérique
    Par Jean-Louis Corbiau dans le forum Access
    Réponses: 9
    Dernier message: 29/09/2005, 15h25
  2. [xslt] filtrer des valeurs numériques
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 20/09/2005, 12h01
  3. [LCD] Contrôle horloge numérique
    Par fredtheman dans le forum Composants VCL
    Réponses: 13
    Dernier message: 27/12/2004, 18h00
  4. retait d'une valeur numérique au mieu d'un texte
    Par RémiDavid dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/04/2004, 16h20
  5. [Delphi 6] EditBox -> valeurs numériques ?
    Par JBrek dans le forum Composants VCL
    Réponses: 9
    Dernier message: 02/12/2002, 13h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo