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 :

Filtrage de chaines JS et navigateur


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 140
    Par défaut Filtrage de chaines JS et navigateur
    Bonjour à tous ,
    Je souhaite utiliser une fonction qui supprime tout les caractères dérangeants d'une chaine et remplacer les espaces et apostrophes par des _.
    Pour le moment, j'utilise des jolies fonctions que j'ai trouvé de ci de la, le tout en javascript (je n'ai pas le droit à un autre langage)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function preg_replace (array_pattern, array_pattern_replace, my_string)  {
    	var new_string = String (my_string);
    		for (i=0; i<array_pattern.length; i++) {
    			var reg_exp= RegExp(array_pattern[i], "gi");
    			var val_to_replace = array_pattern_replace[i];
    			new_string = new_string.replace (reg_exp, val_to_replace);
    		}
    		return new_string;
    }
    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
     
    function systemString (my_string) {
    		my_string = String(my_string);
    		var new_string = "";
    		var pattern_accent = new Array("é", "è", "ê", "ë", "ç", "à", "â", "ä", "î", "ï", "ù", "ô", "ó", "ö");
    		var pattern_replace_accent = new Array("e", "e", "e", "e", "c", "a", "a", "a", "i", "i", "u", "o", "o", "o");
    		if (my_string && my_string!= "") {
    			new_string = preg_replace (pattern_accent, pattern_replace_accent, my_string);
    		}
    		new_string = new_string.replace(/ /g,'_');
    		new_string = new_string.replace(/'/g,'_');
    		new_string = new_string.toLowerCase();
    		alert(new_string);
    		return new_string;
    }
    J'obtiens une chaîne propre avec ces fonctions. Cependant, sous google chrome lors de l'alerte à la fin de la fonction systemString(), j'ai une chaîne qui contient des accents. Je ne comprends pas pourquoi.
    Sous Firefox et IE aucun problème...

  2. #2
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    petite suggestion de simplification:

    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
    <script type="text/javascript"> 
     
    var tab={
    "é":"e", "è":"e", "ê":"e", "ë":"e", 
    "ç":"c",
     "à":"a", "â":"a", "ä":"a",
     "î":"i", "ï":"i",
     "ù":"u",
     "ô":"o", "ó":"o", "ö":"o",
    " ":"_","'":"_"
    };
    function preg(chaine){
    	for(i in tab){
    		chaine=chaine.replace(new RegExp(i,"gi"),tab[i])
    	}
    	return chaine.toLowerCase()
    }
     
    alert(preg("A bientôt, à Noël ou en été."))
     
    </script>

  3. #3
    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 659
    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 659
    Billets dans le blog
    1
    Par défaut
    oulà JT pâbô la boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var TabSpec = {"à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","è":"e","é":"e","ê":"e","ë":"e","ç":"c","ì":"i","í":"i","î":"i","ï":"i","ù":"u","ú":"u","û":"u","ü":"u","ÿ":"y","ñ":"n","-":" ","_":" "}; 
     
    function replaceSpec(Texte){
    	var reg=/[àáäâèéêëçìíîïòóôõöøùúûüÿñ_-]/gi; 
    	return Texte.replace(reg,function(){ return TabSpec[arguments[0].toLowerCase()];}).toLowerCase();
     	}
     
    var TestTexte="àAAÀAAÁÂÒÓÔÕÖØòÒÓÔÕ-ÖØòó_ôõöøÈÉÊËèéêëÇçÒÓÔÕÖØòÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ"
    alert(replaceSpec(TestTexte))
    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 !

  4. #4
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    est-ce vraiment plus rapide?
    sinon j'ai une tite amélioration (tout à l'heure)

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

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 098
    Par défaut
    Moi d'abord

    Code JS : 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
    var test = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens, je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !';
     
    var rules = {
    	'a': /[àáâãäå]+/g,
    	'ae': /[æ]+/g,
    	'c': /[ç]+/g,
    	'e': /[èéêë]+/g,
    	'i': /[ìíîï]+/g,
    	'n': /[ñ]+/g,
    	'o': /[òóôõö]+/g,
    	'oe': /[œ]+/g,
    	'u': /[ùúûü]+/g,
    	'y': /[ýÿ]+/g,
    	'_': /[\s\\]+/g
    }
     
    function remplacerTousLesCaractèresDésagréables( s ) {
    	s = s.toLowerCase();
    	for (var r in rules) s = s.replace(rules[r], r);
    	return s;
    }
     
    alert(remplacerTousLesCaractèresDésagréables(test));
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  6. #6
    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 659
    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 659
    Billets dans le blog
    1
    Par défaut
    Magnifique methode inversée !
    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 !

  7. #7
    Invité de passage
    Homme Profil pro
    Développeur Python
    Inscrit en
    Mars 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Mars 2013
    Messages : 1
    Par défaut
    Citation Envoyé par Watilin Voir le message
    Moi d'abord

    Code JS : 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
    var test = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens, je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !';
     
    var rules = {
    	'a': /[àáâãäå]+/g,
    	'ae': /[æ]+/g,
    	'c': /[ç]+/g,
    	'e': /[èéêë]+/g,
    	'i': /[ìíîï]+/g,
    	'n': /[ñ]+/g,
    	'o': /[òóôõö]+/g,
    	'oe': /[œ]+/g,
    	'u': /[ùúûü]+/g,
    	'y': /[ýÿ]+/g,
    	'_': /[\s\\]+/g
    }
     
    function remplacerTousLesCaractèresDésagréables( s ) {
    	s = s.toLowerCase();
    	for (var r in rules) s = s.replace(rules[r], r);
    	return s;
    }
     
    alert(remplacerTousLesCaractèresDésagréables(test));
    c'est ce qu'il me fallait ! Mais il me semble qu'il y a un bug : les "+" dans les expressions régulières font que s'il y a une suite plusieurs caractères spéciaux, cette suite n'est remplacée que par un seul caractère. Un exemple sera probablement plus clair :

    "créé" est remplacé par "cre" et non par "cree". Il suffit de supprimer les "+" après les "]". Le seul qui soit justifié à mon sens est celui pour les espaces. J'ai donc :

    Code JS : 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
     
    	var rules = {
    		'a': /[àáâãäå]/g,
    		'ae': /[æ]/g,
    		'c': /[ç]/g,
    		'e': /[èéêë]/g,
    		'i': /[ìíîï]/g,
    		'n': /[ñ]/g,
    		'o': /[òóôõö]/g,
    		'oe': /[œ]/g,
    		'u': /[ùúûü]/g,
    		'y': /[ýÿ]/g,
    		'th': /[ðþ]/g,
    		'ss': /[ß]/g,
    		'_': /[\s\\]+/g
    	};

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

Discussions similaires

  1. Comparaison de chaines (compatibilité entre navigateurs)
    Par psychoP@T dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/05/2010, 11h00
  2. Filtrage quand la valeur de la chaine est vide
    Par lesanglier dans le forum Développement Sharepoint
    Réponses: 2
    Dernier message: 05/10/2009, 15h16
  3. [MySQL] Filtrage d'une chaine de caractères
    Par yann18 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/09/2009, 15h51
  4. filtrage d'une chaine de caractéres
    Par localhost dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 20/09/2003, 01h11

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