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 :

Interdire les emoticon 😉 dans les champs Text


Sujet :

JavaScript

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 156
    Points : 74
    Points
    74
    Par défaut Interdire les emoticon 😉 dans les champs Text
    Bonjour à tous,

    Je souhaiterais interdire le collage des emoticons dans un champs texte.

    J'avoue, j'ai pensé à vérifier les balises, les caractères spéciaux, les doubles espaces, etc... mais jamais les emoticons jusqu'à ce qu'un utilisateur me fasse le coup

    A vrai dire, je ne sais même pas comment ça se passe au niveau html. J'ai copié un emoticon sur google et je l'ai collé et ça a fonctionné... tout simplement... Alors comment dire à javascript (j'utilise jquery) de vérifier l'input et lui faire comprendre qu'un bonhomme jaune qui rigole est interdit ???

    Help !

    Merci

    Vinze

  2. #2
    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 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    une émoticone à un code caractère ....
    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 !

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 156
    Points : 74
    Points
    74
    Par défaut
    Merci...

    Tu respectes en effet bien ta règle n°1 sur le succès...

  4. #4
    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 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Le but n'est pas de faire le code à ta place, mais de te donner les voies de réflexion ...

    trouve le charcode de ton emoticon et teste sa présence dans la chaine pour éventuellement le supprimer ...
    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 !

  5. #5
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    … Jusqu’à ce que quelqu’un utilise un autre symbole non prévu, qu’il faudra ajouter à la liste noire, etc. Ça n’a pas de fin.
    Il vaudrait mieux utiliser une liste blanche : n’autoriser qu’un ensemble de caractères, et rejeter tout le reste.

    Pour info, les émojis ne sont ni du HTML ni du JavaScript, ce sont simplement des caractères. Ils n’ont pas de représentation imposée, ce sont les clients (navigateurs, applications, logiciels) qui choisissent quelle apparence ils doivent avoir. Un peu de la même façon qu’un « a » n’a pas la même apparence en Times New Roman ou en Comic Sans MS.

    Ils ont en commun d’être représentés sur plus de 16 bits (plus de 2 octets). Par exemple, le caractère U+1F4A9 💩 (“pile of poo”) est représenté par les octets 01, F4, A9. Ils posent problème en JS car les chaînes sont encodées en interne en UTF-16 qui est un encodage à 16 bits. Du coup, les caractères qui « dépassent » sont traduits en une surrogate pair (paire de substitution), c’est-à-dire deux caractères qui n’ont pas de représentation quand ils sont pris séparément, mais qui, ensemble, représentent le caractère voulu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >> const POO = "💩" // note : ce forum ne représente pas bien les émojis dans les blocs de code
     
    >> POO.length
    2
     
    >> POO.match(/(.)(.)/)
    Array(3) [ "💩", "\ud83d", "\udca9" ]// on voit les codes de la surrogate pair
    Le fait que JS voie ça en réalité comme deux caractères est contre-intuitif, et ça peut causer des erreurs auxquelles on ne s’attendait pas.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 156
    Points : 74
    Points
    74
    Par défaut
    Merci beaucoup Watilin pour cette réponse approfondie !

    J'avais peur de cette liste blanche.

  7. #7
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    pour la gestion de la saisie je te conseille d'utiliser les contraintes de validations, maintenant possibles en html5 => https://developer.mozilla.org/fr/doc...int_validation
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  8. #8
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 176
    Points
    17 176
    Par défaut
    Salut

    Ma solution, car j'avais besoin de cette fonction pour un petit programme perso.
    Code HTML : 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    <!DOCTYPE html>
    <html lang="fr"> <!-- LimiCaract.html -->
    	<head>
    		<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
    		<title>Limitation de caratères</title>
    		<style>
                            #cadre {
                                    border: 2px solid white;
                                    padding: 2px 2px 1px 2px_
                            }
                            #InText {width: 650px;height: 105px}
                    </style>
    	</head>
    	<body>
    		<div id="cadre">		
    			<textarea id="InText" oninput="VerifEnter()">
    				Je suis toujours dans les Essai 😨
    						Aujourd'hui, détection de l'icône qui rit 😀 pour l'éliminer.
    						🙏 Cela serait coule que çà fonctionne ! 1234
    			</textarea>
    		</div>
    		<script>
                            //---------------------- du javascript complémentaire -----------------------------------
                            function VerifEnter(){
                                    let cadre = document.getElementById("cadre");
                                    let ValPx;
                                    let Elem = document.getElementById("InText");
                                    let soumistxt = Elem.value;
                                    //pour supprimer tous caractères autres que ceux définis dans le RegExp
                                    let patterntxt = new RegExp(/[^A-Za-z0-9_çñÄÂÀÁäâàáËÊÈÉéèëêÏÎÌÍïîìíÖÔÒÓöôòóÜÛÙÚüûùúµ<>@&?;,:"'!=%\(\)\+\-\/\*\.\s\\]*/,"gim");
                                    let MsG = soumistxt.replace(patterntxt,"");
     
                                    if (soumistxt!==MsG){
                                            (Elem.style.width !== "") ? ValPx = parseInt(Elem.style.width) : ValPx = 650;
                                            ValPx = (ValPx + 6)+'px';
                                            cadre.style.width = ValPx;
                                            cadre.style.borderColor = 'red';
                                            Elem.style.cursor = "not-allowed";
                                            //tempo pour laisser le temps de voir l'alerte (cadre rouge et curseur interdit)
                                            setTimeout(function(){Elem.value = MsG;cadre.style.borderColor = 'white';Elem.style.cursor = "text";},750);
                                    }
                            }
                    </script>
    	</body>
    </html>
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  9. #9
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    @ProgElecT



    En production l'événement 'input' va générer du travail pour le navigateur et l'on risque d'avoir un comportement insatisfaisant (clignotement, sautillement) du textarea du point de vue de l'utilisateur.

    Le code ci-dessous fait le travail, mais...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    const
        patterntxt = new RegExp(/[^A-Za-z0-9_çñÄÂÀÁäâàáËÊÈÉéèëêÏÎÌÍïîìíÖÔÒÓöôòóÜÛÙÚüûùúµ<>@&?;,:"'!=%\(\)\+\-\/\*\.\s\\]*/, "gim"),
        elemText = document.querySelector('#InText');
     
    elemText.addEventListener('change', ev => {
        elemText.value =  elemText.value.replace(patterntxt, "");
    }, {
        capture: false,
        passive: true,
        once: false
    });

    ...l'événement 'change' implique que l'utilisateur agisse en dehors du textarea pour que le texte soit corrigé. Ce qui n'est pas idéal.

    Solution proposée : surveiller l'événement 'mouseenter' du textarea et dans un setInterval générer un événement 'change' sur le textarea chaque X secondes. Le setInterval doit être stoppé dans l'événement 'mouseleave'.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  10. #10
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 176
    Points
    17 176
    Par défaut
    Salut

    Citation Envoyé par danielhagnoul
    En production l'événement 'input' va générer du travail pour le navigateur et l'on risque d'avoir un comportement insatisfaisant (clignotement, sautillement) du textarea du point de vue de l'utilisateur.
    Je n'avais pas penser à ce problème, j'ai donc chargé le textarea avec 250 000 caractères, puis 500 000, là le fait est qu'il y à un petit retard entre la frappe du caractère au clavier et l'affichage de celui-ci, mais çà reste jouable.
    Par contre à partir de 750 000 caractères, le temps de réactions devient prohibitif.

    Mes premiers essais avec l'évènement change ne m'a pas semblé judicieux car, comme tu l'as signalé, la détection du dernier caractère entré ou coller n'est pas vérifié tant que l'on reste dans le textarea.

    Je reste donc avec l'événement input dans mon programme qui ne comptera gère plus qu'un maximum de 5 000 caractères, mais plutôt un petit millier.

    Je retiens tout de même tes observations, qui un jour me seront sûrement utiles.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

Discussions similaires

  1. Réponses: 6
    Dernier message: 19/10/2008, 07h56
  2. Récupérér les valeurs d'un menu déroulant dans un champ texte
    Par chnizer dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 25/08/2008, 15h47
  3. Afficher les coordonnées d'un layer dans des champs texte
    Par renaud26 dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 15/08/2006, 13h53
  4. [VBA-A]Remplacer les espaces dans un champ texte
    Par Ericka dans le forum VBA Access
    Réponses: 6
    Dernier message: 17/05/2006, 15h31
  5. [HTML] formulaire gérer les espaces dans un champs texte
    Par renofx1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 12/01/2006, 14h17

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