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 :

Saisie de caractère


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 88
    Par défaut Saisie de caractère
    Bonsoir,

    Voilà mon problème.
    Je souhaite que lorsque les touches &é"'(-è_çà) soit frappées dans une INPUT box, ça les remplace automatiquement par
    1234567890.

    J'ai saisi ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td class="texte0"> <input name="serie" type="text" id="serie" onkeyup="this.value=this.value.toUpperCase()" value='<?php echo "$num_serie"; ?>'></td>
    Malheureusement j'obtiens :

    Au lieu de :
    Quelqu'un aurait une idée pour m'aider.
    Merci pour votre aide

  2. #2
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    bonjour,

    Malheureusement j'obtiens :
    '(À&À"À'''ÉÀÀ('
    Au lieu de :
    5010304442005
    à quoi correspondent ces chiffres ?

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 88
    Par défaut Réponse
    C'est une saisie faite par une douchette (lecteur code barre).
    Si j'utilise ce lecteur de code barre dans le bloc note en laissant le clavier en saisie minuscule. J'obtiens par exemple :
    (à&à"à'''éàà(

    Si je passe le clavier en majuscule la douchette me donne dans le bloc note :
    5010304442005

    J'ai ce problème avec la saisie dans ma page PHP. J'ai cru bon de forcer en utilisant cette fonction onkeyup="this.value=this.value.toUpperCase()" .

    Sauf que ça ne simule pas vraiment la touche shift ou capslock du clavier puisque ça me donne :
    '(À&À"À'''ÉÀÀ('

    Comptant sur votre aide
    Merci

  4. #4
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Tu n'as pas une documentation ?
    Visiblement avec ce que tu as donné j'en déduis :
    ( 5
    à 0
    & 1
    à 0
    " 3
    à 0
    ' 4
    ' 4
    ' 4
    é 2
    à 0
    à 0
    ( 5

    Le code doit être spécifique à ton matériel, le code affiché n'est pas du code ASCII (ou un masque est appliqué sur le code mais je ne vois pas lequel). Il faut donc réaliser un code qui convertisse chaque caractère en nombre : regarde la documentation du matériel. Visiblement tu n'as que 10 caractères à déchiffrer Et avec l'exemple que tu as donné, tu en as 6 codes qui correspondent à 6 caractères. Il te reste à en trouver 4

    La fonction toUpperCase() met en majuscule les caractères d'une chaine mais ne simule pas les touches shift ou capslock enfoncées.

  5. #5
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    mais nan, ce qu'il dit c'est qu'il veut que son input input prenne les chiffres du clavier (pas le pad numérique, mais les touches au-dessus de la 1ere ligne de lettres) même si on n'est pas en MAJLOCK (pour un clavier azerty).

    il suffit juste de filtrer les caractères entrées :
    - autoriser les chiffres
    - si le caractère entré est "&", "é", """, "'", "(", "-", "è", "_", "ç" ou "à" alors le remplacer par le chiffre correspondant "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"
    - sinon refuser le caractère

    bon, de cette façon ça ne marche que pour le clavier azerty

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 88
    Par défaut Réponse
    Oui c'est bien ça. Le Hic, je ne sais pas faire. Je pensais qu'il exisatit un truc du même genre que Upper case().

    Est-ce que quelqu'un peut m'aider à construire cette fonction spécifique. Je profiterai par cette exemple pour m'instruire un peu dans ce domaine.

    Merci par avance.

  7. #7
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    http://javascript.developpez.com/faq...nt#appuiTouche

    sinon il y a pas mal de discussions sur le forum sur la limitation de la saisie (cherche onkeydown, onkeypress, ...)


  8. #8
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 88
    Par défaut Réponse
    Le dernier lien ne m'est pas d'un grand secours compte tenu de mon niveau.

    J'ai trouvé ceci sur internet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <script language="javascript" type="text/javascript">
    function change_char(char) {
        var depuis = new Array("&", "é", '"', "'", "(", "-", "è", "_", "ç", "à");
        var vers = new Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
     
        for (i = 0; i < depuis.length; i++) {
            if (depuis[i] == char) {
                char = vers[i];
            }
        }
        return (char);
    }
    </script>
    Lorsque je l'applique dans ma page PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td><input type="texte" name="serie[<?php echo $num; ?>]" value="<?php echo $serie; ?>" onkeyup="this.value=change_char(this.value)"></td>
    ça ne me change que le premier caractère.

    C'est une piste. Sinon y a t-il moyen de forcer l'activation de la touche shift ou caps lock ?

  9. #9
    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
    l'idée des deux arrays est bonne, mais il faut la poursuivre:

    inspire toi de ça
    http://www.developpez.net/forums/d61...dants-normaux/
    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 !

  10. #10
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 88
    Par défaut Réponse
    Merci pour toute l'aide que vous tentez de m'apportez. Mais là je suis largué.
    Je ne comprends pas pourquoi seul mon premier caractère est remplacé.
    Il y a peut-être une erreur de syntaxe dans mon script plus haut. C'est sûr qu'avec un clavier QWERTY, j'aurai pas ce problème mais bon on est en France. Y a t-il moyen de forcer sur ma page l'activation de caps lock ou shift ?

  11. #11
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Citation Envoyé par bigboomshakala Voir le message
    mais nan, ce qu'il dit c'est qu'il veut que son input input prenne les chiffres du clavier (pas le pad numérique, mais les touches au-dessus de la 1ere ligne de lettres) même si on n'est pas en MAJLOCK (pour un clavier azerty).

    il suffit juste de filtrer les caractères entrées :
    - autoriser les chiffres
    - si le caractère entré est "&", "é", """, "'", "(", "-", "è", "_", "ç" ou "à" alors le remplacer par le chiffre correspondant "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"
    - sinon refuser le caractère

    Quel idiot je suis, je n'avais pas fait le rapprochement entre les chiffres et les caractères

  12. #12
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 88
    Par défaut Re
    Je me suis inspiré du lien précédent.
    voici mon script :
    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
    <script type='text/javascript'>
    var chaine ='&,é,",\',-,è,_,ç,à';
    function Forcechiffre(Texte){
    var special = '&é"\'-è_çà';
    var Chiffre = '123467890';
     
    special = special.split('');
    Chiffre = Chiffre.split('');
    var i=0;
    while(special[i]){
    					var Reg=new RegExp(special[i],'gi');
                     Texte=Texte.replace(Reg,Chiffre[i]);
                     i++
                     }
    return Texte;
    }                  					
     
    alert(Forcechiffre(chaine))
    </script>
    Je ne parviens pas à y glisser la parenthèse pour le chiffre 5. çgénère un problème. Pour l'apostrophe, j'ai réussi en mettant devant \
    Pour la parenthèse je ne trouve pas. Si quelqu'un peut se pencher la dessus.

    Merci

  13. #13
    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
    a priori il faut aussi échapper la parenthèse avec \

    en echappant aussi le \

    du coup le split ne peut plus se faire juste par caractère:

    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
    <script type='text/javascript'>
    var chaine ='&,é,",\',-,è,_,ç,à';
    function Forcechiffre(Texte){
    var special = '&,é,\",\',\\(,-,è,_,ç,à';
    var Chiffre = '1234567890';
     
    special = special.split(',');
    Chiffre = Chiffre.split('');
    var i=0;
    while(special[i]){
    					var Reg=new RegExp(special[i],'gi');
                     Texte=Texte.replace(Reg,Chiffre[i]);
                     i++
                     }
    return Texte;
    }                  					
     
    alert(Forcechiffre(chaine))
    </script>
    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 !

  14. #14
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 88
    Par défaut Re
    Bonjour Spacefrog,

    J'avais bien vu dans le code source du navigateur que quelque chose cloché sur la ligne special = special.split(''); quand j'insérais \(.
    Le fait de mettre special = special.split(',') a résolu le problème.

    Je vous remercie ainsi que bigboomshakala et Auteur pour l'aide précieuse que vous m'avez apporté.

    A présent ça fonctionne. Je mets le code final et un exemple d'utilisation pour les besoins éventuels de ce site (testé sous IE et Firefox).

    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
    19
    20
    21
    22
    23
    24
     
    <script type='text/javascript'>
    // Forcer l'usage des chiffres (clavier Azerty à désactiver pour clavier Qwerty)
    var chaine ='&,é,\",\',\(,-,è,_,ç,à';
    function Forcechiffre(Texte){
    var special = '&,é,\",\',\\(,-,è,_,ç,à';
    var Chiffre = '1234567890';
     
    special = special.split(',');
    Chiffre = Chiffre.split('');
    var i=0;
    while(special[i])
    {
    var Reg=new RegExp(special[i],'gi');
    Texte=Texte.replace(Reg,Chiffre[i]);
    i++
    }
     
     
    return Texte;
    }                  					
     
    alert(Forcechiffre(chaine))
    </script>
    Usage (exemple) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td><input type="texte" name="serie[<?php echo $num; ?>]" value="<?php echo $serie; ?>" onkeyup='this.value=Forcechiffre(this.value)' onkeydown="this.value=this.value.toUpperCase()"></td>
    Encore merci à tous

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

Discussions similaires

  1. [D7] masque avec restriction de saisi de caractères
    Par raoulmania dans le forum Composants VCL
    Réponses: 5
    Dernier message: 13/12/2005, 07h41
  2. Problème de saisie de caractères
    Par XantaX dans le forum Assembleur
    Réponses: 3
    Dernier message: 07/12/2005, 15h37
  3. CComboBox::Limiter la Saisie des caractères
    Par bizulk dans le forum MFC
    Réponses: 6
    Dernier message: 13/09/2005, 15h42
  4. [VB.NET] Empecher la saisie de caractère spéciaux
    Par bloody22 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 28/07/2005, 11h09
  5. Saisie du caractère '@' ?
    Par ravelo dans le forum Bases de données
    Réponses: 2
    Dernier message: 17/06/2004, 16h58

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