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 :

verification numerique input


Sujet :

JavaScript

  1. #21
    Expert éminent

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Par défaut
    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
     
     
    function IsNumeric(sText)
    {
       var ValidChars = "0123456789.";
       var Char;
       var nombre = "";
     
     
       for (i = 0; i < sText.length; i++) 
          { 
          Char = sText.charAt(i); 
          if (ValidChars.indexOf(Char) != -1) 
             {
                 nombre += Char;
             }
          }
     
       return nombre;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    onkeyup="this.value = IsNumeric(this.value);"

  2. #22
    Inactif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 63
    Par défaut
    Citation Envoyé par vermine Voir le message
    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
     
     
    function IsNumeric(sText)
    {
       var ValidChars = "0123456789.";
       var Char;
       var nombre = "";
     
     
       for (i = 0; i < sText.length && IsNumber == true; i++) 
          { 
          Char = sText.charAt(i); 
          if (ValidChars.indexOf(Char) != -1) 
             {
                 nombre += Char;
             }
          }
     
       return nombre;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    onkeyup="this.value = IsNumeric(this.value);"
    Il y a des moments dans la vie ou il faut utiliser les fonctions fournies par le langage
    de plus ta fonction n'a pas un bon nom puisque vue son nom elle devrait retourner un booleen et non une chaine transformée .

    http://www.jsfiddle.net/AF8p2/1/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function isNumeric(sText, base) {
        return !isNaN(sText*1);
    }
     
    document.write(isNumeric('10s'), '<br>'); //=> false 
    document.write(isNumeric('20'), '<br>');  //=> true
    document.write(isNumeric('0x10'), '<br>'); //=> true 
    document.write(isNumeric('3.14'), '<br>'); //=> true
    Pourquoi j'utilise '*1' et non pas parseInt, parce qu'ici on veut tester si une chaine est un nombre ou pas, et si on tombe sur le premier cas que je donne en exemple :
    '10s', parseInt nous retournera 10, alors que *1 retournera NaN;

    Pour avoir une fonction qui ne retourne que les chifffres et le . une simple expression régulière suffira :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function getOnlyDecimalChars(sText) {
        return sText.match(/([0-9.]+)/g).join('');
    }
     
    document.write(getOnlyDecimalChars('10.4ss4')); //=> 10.44;

  3. #23
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    et pour Ebzz
    => true (comme prévu)

    Je comprends pas la démonstration

    Mais c'est peut être mes booléens "glop" et "pas glop" qui ont été mal interprétés

    A+

  4. #24
    Expert éminent

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Par défaut
    Oui, mais j'ai cru qu'il fallait récupérer la chaine nettoyée de tout caractère autre que 0123456789.
    Chose que l'on peut faire avec une regexp aussi, évidemment, mais j'ai simplement repris le code déjà existant.

  5. #25
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 172
    Par défaut
    je pensais pas faire autant de polemique avec mon topic

    Au final je fais quoi ....

    Thx

  6. #26
    Expert éminent

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Par défaut
    Au final, vous voulez quoi ?

  7. #27
    Inactif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 63
    Par défaut
    Citation Envoyé par epoc.01 Voir le message
    je pensais pas faire autant de polemique avec mon topic

    Au final je fais quoi ....

    Thx
    En lisant un peu et en essayant de comprendre il suffit de cumuler les fonctions qui marchent avec ton input et on obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function getOnlyDecimalChars(sText) {
        return sText.match(/([0-9.]+)/g).join('');
    }
     
    <input type="text" onkeyup="this.value = getOnlyDecimalChars(this.value)" />

  8. #28
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 172
    Par défaut
    Citation Envoyé par Gsnalf Voir le message
    En lisant un peu et en essayant de comprendre il suffit de cumuler les fonctions qui marchent avec ton input et on obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function getOnlyDecimalChars(sText) {
        return sText.match(/([0-9.]+)/g).join('');
    }
     
    <input type="text" onkeyup="this.value = getOnlyDecimalChars(this.value)" />
    Salut Gsnalf, merci de ton aide mais cela ne fonctionne pas, l'chaine est envoyé meme s'il y a des caracteres non desirés.

  9. #29
    Expert éminent

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Par défaut
    Vous voulez vider la chaine ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="text" onkeyup="this.value=this.value.match(/^([0-9.]+$)/g) ? this.value : ''">

  10. #30
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    un peu radical ^^
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  11. #31
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 172
    Par défaut
    merci ca fonctionne..

    Maintenant pour perfectionner la chose, comment empecher la saisie de 2 . (ex : 20..36)? je pense que ca doit etre possible en javascript.

  12. #32
    Inactif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 63
    Par défaut
    Citation Envoyé par epoc.01 Voir le message
    merci ca fonctionne..

    Maintenant pour perfectionner la chose, comment empecher la saisie de 2 . (ex : 20..36)? je pense que ca doit etre possible en javascript.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <input type="text" onkeyup="this.value = getOnlyDecimalChars(this.value)" />
     
    function getOnlyDecimalChars(sText) {
        var m = sText.match(/[0-9.]/g,'') //on ne garde que les chiffres et .
        return  m ? m.join('') // on remet tout ça dans une seule string
               .replace(/\.+/,'.') //on remplace tous les .. et ...+ par .
               .match(/^\d+\.?\d*/) // on renettoie la chaine pour ne pas se retrouver avec un cas du genre 12.34.56 on ne gardera que 12.34
               .join('') // on join le résultat
             //dans le cas ou m est null on retour une chaine vide.
            : '';
    }
    Voila ça te clean la chaine proprement en ne gardant que les chiffres et . et en ne te laissant que la possibilité de taper 12.34 par exemple

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getOnlyDecimalChars('12Z....SDsds23.qsdsq234.131...13'); //=> 12.23
    edit : testable ici
    http://www.jsfiddle.net/e6ZWr/

  13. #33
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 172
    Par défaut
    merci ca fonctionne parfaitement

  14. #34
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par epoc.01 Voir le message
    merci ca fonctionne parfaitement
    Oui mais c'est dangereux

    Si il y a un caractère invalide il faut le signaler et non pas le masquer ...

    Sauf si on a la garantie de tomber sur l'unique utilisateur du web qui ne fait jamais de faute de frappe et/ou relit systématiquement tout ce qu'il tape.

    A éviter ...

    A+

  15. #35
    Inactif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 63
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    Oui mais c'est dangereux

    Si il y a un caractère invalide il faut le signaler et non pas le masquer ...

    Sauf si on a la garantie de tomber sur l'unique utilisateur du web qui ne fait jamais de faute de frappe et/ou relit systématiquement tout ce qu'il tape.

    A éviter ...

    A+
    On ne masque rien, on nettoie ce que l'utilisateur fait comme faute de frappe, et on ne supprime pas le contenu du champ, je ne fais qu'enlever les caractères inutiles et mal tapé, puisque l'utilisateur n'a le droit que de taper des nombres.

    Si l'utilisateur tapes : 12S..34
    il se retrouveras avec 12.34 lors de sa frappe cela se passera ainsi :

    1 => 1
    12 => 12
    12S => 12
    12. => 12.
    12.. => 12.
    12.3 => 12.3
    12.34 => 12.34

  16. #36
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    C'est justement ce qui est dangereux.

    Car en faisant ça tu tentes d'interpréter ce que l'utilisateur pensait avoir saisi.

    Si il s'est trompé, il s'est trompé. Et il faut lui dire et ne pas faire de supposition.

    Dans l'exemple que tu donnes, il voulait en fait saisir 123.34 mais s'est gauffré (ben oui, y avait la super collègue qui passait dans le bureau et il fallait bien sortir une vanne pour se faire remarquer ).
    Mais toi tu enregistres 12.34 sans rien lui dire. Lui, comme tout le monde, valide les yeux fermés. C'est pas bien, mais très classique.

    Il ne s'apercevra jamais qu'il s'est trompé.
    Ou alors lors de l'arrêté comptable mensuel (mais y a des chances qu' "on" s'en aperçoive pour lui)

    A+

  17. #37
    Inactif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 63
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    C'est justement ce qui est dangereux.

    Car en faisant ça tu tentes d'interpréter ce que l'utilisateur pensait avoir saisi.

    Si il s'est trompé, il s'est trompé. Et il faut lui dire et ne pas faire de supposition.

    Dans l'exemple que tu donnes, il voulait en fait saisir 123.34 mais s'est gauffré (ben oui, y avait la super collègue qui passait dans le bureau et il fallait bien sortir une vanne pour se faire remarquer ).
    Mais toi tu enregistres 12.34 sans rien lui dire. Lui, comme tout le monde, valide les yeux fermés. C'est pas bien, mais très classique.

    Il ne s'apercevra jamais qu'il s'est trompé.
    Ou alors lors de l'arrêté comptable mensuel (mais y a des chances qu' "on" s'en aperçoive pour lui)

    A+
    Si le gars tape 123.34 il peut taper 123.34
    je vois pas le problème. Mais je crois que toi tu préfèrerais qu'on avertisse l'utilisateur qu'il s'est trompé lors de la saisie du nombre. là oui je suis plutot d'accord. C'est plutôt chiant les trucs automatiques. Sauf pour le cas d'une date, là c'est plutot pas mal.

  18. #38
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par Gsnalf Voir le message
    Mais je crois que toi tu préfèrerais qu'on avertisse l'utilisateur qu'il s'est trompé lors de la saisie du nombre.
    C'est exactement ça
    Car à partir du moment où il s'est trompé, on ne peut pas savoir ce qu'il aurait dû/voulu taper à la place ...

    A+

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Forcer l'utilisateur a saisir du numerique dans un input type="text"
    Par scraly dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 02/06/2016, 21h30
  2. Format input numerique
    Par killerhertz dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 04/01/2011, 12h58
  3. verif champ input générés avec une boucle
    Par rudak dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 24/12/2009, 07h50
  4. [AJAX] Vérification de champ numerique avec ajax
    Par anouarsurvive dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 24/10/2008, 16h42
  5. [Utile]Rajout automatique dans input et verif date
    Par matpal dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 08/11/2004, 16h36

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