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

jQuery Discussion :

Remplacer des occurrences dans une phrase


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 171
    Par défaut Remplacer des occurrences dans une phrase
    Bonjour,

    J'ai une fonction, que lors de la saisie, on remplace des mauvais mots par le vide ou bien ***, alors je suis en face d'un problème où le remplacement est effectué seulement pour un seul mot dans la liste:

    DEMO


    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
     
     
    function filterString(string, wordsList, replace){
     
    	var string = string.trim();
      var string = string.replace( /\s\s+/g, ' ' ); // remove more than one space	
      var splStr = string.split(' ');
     
      var isTrue = [] // There is no error
      var badWord = [] // store bad words here
      var result; // final result true OR false
      var replace	= []; // list items to replace the bad word
     
      $.each(splStr, function( index, value ) {
      //console.log( index + ": " + value );
      checkBad = $.inArray( value, wordsList );
      //console.log(checkBad);
     
      // if found
      if(checkBad > -1){
      	isTrue.push(1); // there is an error
        //console.log(splStr[index]+' is bad');
        badWord.push(splStr[index]); 
      } else {
      	isTrue.push(0);
        //console.log(splStr[index]+' is good');
      }
     
      //console.log(badWord);
     
    }); // end each
     
    var checkErrors = $.inArray( 1, isTrue );
     
    if(checkErrors > -1){
    	result = true;
    	var sortBadWords = jQuery.uniqueSort( badWord );
      //console.log('List '+sortBadWords);
    } else {
    var result = false;
    var sortBadWords = null;
    }
     
    return [result, sortBadWords, isTrue];
     
    }
     
     
    var wordsList = ['fuck', 'suck'];
    var replace	= ['', '***']; // replace with nothing or with stars
     
     
    $('.wrap').on('keyup', function(){
    	 var value = $(this).val();
     
       badList = filterString(value, wordsList, replace);
      //console.log(badList);
     
     
      if((badList[0]) === true){
      	console.log('is true?: '+badList[0]);
        console.log('list words '+badList[1]);
        console.log(badList[1]);
        var countWords = badList[1].length;
        console.log('There are ' +countWords+ ' word');
        var indexWords = countWords-1;
     
        for ( var i=0; i<=indexWords; i++ ){
        console.log('x '+badList[1][i]);
        	var regex = new RegExp(badList[1][i], 'g');
        	var newW = value.replace(regex, '***');
          //console.log('newW '+newW);
        }
     
      } else {
        console.log('is true?: '+badList[0]);
        var newW = value;
     
      }
     
      console.log('true array '+badList[2]);
     
    if(badList[0]){
    	console.log('There are some bad words');
     
      console.log('first word: '+badList[1][0]);
      console.log('second word '+badList[1][1]);
      console.log('combine words '+badList[1].join(','));
    } else {
    	console.log('Safe string :\)');
    }
     
     
       $('.prev').html(newW).show();
     
    });
    Example:

    salut suck fuck suck salaut fuck
    Résultat:

    salut suck *** suck salaut ***
    Seul le mot "fuck" est remplacé

    Merci a vous

  2. #2
    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 : 75
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Voir : http://danielhagnoul.developpez.com/...Surligner.html

    Dans ce Q/R de ma FAQ, je surligne les mots en me servant de la fonction findAndReplaceDOMText() de James Padolsey avec le code :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    findAndReplaceDOMText( $( "article.surligneNorbi", "section.conteneur" )[ 0 ], { 
    	"find" : "Morbi", 
    	"wrap" : "mark" 
    });

    Sur GitHub, l'auteur propose plusieurs options. Dans votre cas, il suffit de remplacer "wrap" par "replace" :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    findAndReplaceDOMText( $( "#monID" )[ 0 ], { 
    	"find" : "Morbi", 
    	"replace" : "" 
    });

    Voir : https://github.com/padolsey/findAndReplaceDOMText

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

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 171
    Par défaut
    Y a pas une autre méthode pour le faire, je trouve que la solution est un peu compliquée

  4. #4
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 498
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 498
    Par défaut
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var str = "salut suck fuck suck salaut fuck";
    var badWords = ["fuck", "suck"];
    $.each(badWords, function(i,bw) {
    str = str.replace(new RegExp(bw, "g"), "***");
    });
    console.log(str);
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 171
    Par défaut
    Merci Doksuri, je l'ai fait a l'inverse, j'ai fait loop sur la phrase et tester le mot:

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    var splStr = string.split(' ');
     
      $.each(splStr, function( ind , val ) {
        //console.log('vvv ' +val);
     
    		// check if the string value exists in the forbidden list (no: -1, yes: 0 and above)
        check = $.inArray(val, forbidden);
        //console.log('c '+check+ ' v '+val);
     
        if(check > -1){
        	badStr	= val +' Found';
        	//console.log('value '+val+' found');
        } else {
        	badStr	= 'Fine';
        	//console.log('Fine');
        }
     
        // start building the pattern for new RegExp
        var pattern = forbidden.join('|');
     
         // GOOD START
         // String: sucks fucks us although has suck fucks
         // Result: ***s ***s us although has *** ***s
         // should match the exact word
         var regex = new RegExp('\('+pattern+'\)', 'g');
    		// GOOD END
     
        //var regex = new RegExp('\('+pattern+'\)', 'g');
        //newStr = string.replace(regex, '***');
        //console.log(newStr);
     
        newStr = string.replace(regex, '***');
        console.log(newStr);
     
        });
    Je veux bien la développer en précisant le mot a remplacer et son remplaçant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var bad = [{
    	"fuck": "*",
    	"suck": "**",
    	"damn": "***"
       	}];
    Je n'ai jamais travaillé avec des array multidimensionnelles

    Merci a vous

  6. #6
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 521
    Par défaut
    Code jquery : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    var splStr="salut fuck good suck morning damn" ;
    var badWords=[{"fuck":"*","suck":"**","damn":"***"}];
      $.each(badWords,function(i,val) {
     	$.each(val,function(i,j){
        	console.log("val ["+i+"] :"+j);
            if(splStr.indexOf(i)>-1){
            	splStr=splStr.replace(i,j);//remplacement.
            }
        	});
        });
        console.log("splStr après remplacement est :"+splStr);

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

Discussions similaires

  1. Remplacer des carractères dans une chaine
    Par Superzobi dans le forum C++
    Réponses: 23
    Dernier message: 02/05/2007, 16h35
  2. [Tableaux] Remplacer des variables dans une chaine
    Par Ricou13 dans le forum Langage
    Réponses: 3
    Dernier message: 28/03/2007, 21h48
  3. [RegEx] Remplacer des caractères dans une string
    Par jexl dans le forum Langage
    Réponses: 2
    Dernier message: 15/03/2007, 22h26
  4. Réponses: 4
    Dernier message: 29/08/2006, 17h44
  5. Affichage des chiffres dans une phrases arabe
    Par omda dans le forum Oracle
    Réponses: 4
    Dernier message: 30/09/2005, 13h36

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