Partage
  • Partager sur Facebook
  • Partager sur Twitter

Réécriture champs texte type url rewriting

exemple : "J'adore les patates !" en "j-adore-les-patates"

    23 août 2011 à 19:52:47

    Bonjour à tous,

    C'est vraiment en cas d'extrême limite que je me résous à poster dans un forum, la plupart du temps en parcourant internet je trouve les réponse à mes questions. Mais là, non, je sais pas pourquoi :( Enfin bref.

    Ce que je veux faire : transformer une chaîne normale en une chaîne aux propriétés suivantes :
    • - Remplacer les caractères accentués par des caractères non accentués
    • - Remplacer les caractères spéciaux et espaces en tirets
    • - N'avoir q'un seul tiret à chaque fois (pas de "hey ! :) cool" en "hey------cool")


    Dans mon formulaire (tout bête) :

    <input type="text" name="title" id="title" value="" maxlength="64" />
    <input type="text" name="url" id="url" value="" maxlength="16" />
    


    Ce que j'ai pu trouver :
    $("#title").keyup(function () {
        var value = $(this).val();
        $("#url").val(value.replace(/[' ]/g, patternURL).toLowerCase());
    }).keyup();
     
    function patternURL(car) {
      if(car == "'" || car == " ") return "-";
      if(car == "ç") return "c";
      if(car == "é" || car == "è" || car == "ê") return "e";
      if(car == "à" || car == "â") return "a";
      if(car == "ù" || car == "û") return "u";
      if(car == "ô") return "o"; */
    }
    


    La fonction est absolument horrible, mais montre bien ce que je veux faire.
    J'utilise jQuery, je pense qu'avec des regex ça devrait le faire, mais je n'arrive pas à trouver...

    Je continue de chercher, en espérant avoir une réponse :)

    A très vite, et surtout : merci !
    • Partager sur Facebook
    • Partager sur Twitter
      23 août 2011 à 20:24:41

      Je sais que je vais être hors sujet, mais pourquoi pas en Php ? :)
      • Partager sur Facebook
      • Partager sur Twitter
        23 août 2011 à 20:28:28

        Eh bien pour une mise à jour automatique du champs url, histoire de ne pas avoir à le taper à la main. Eventuellement, pourquoi pas en AJAX avec un appel à du PHP...

        J'ai un début de solution (très moche) :
        $("#title").keyup(function () {
        		var value = $(this).val();
        		
        		value = value.toLowerCase();
        
        		value = value.replace(/[àáâãäå]/g,"a");
        		value = value.replace(/[èéêë]/g,"e");
        		value = value.replace(/[ìíîï]/g,"i");
        		value = value.replace(/[ðòóôõö]/g,"o");
        		value = value.replace(/[ùúûü]/g,"u");
        		value = value.replace(/[ýÿ]/g,"y");
        		value = value.replace(/[ç]/g,"c");
        		value = value.replace(/[ ]/g,"-");
        		value = value.replace(/[\?\!\&\~\,\.\(\)\[\]\:\;\#\$]/g,"");
        		
        		$("#url").val(value);
            }).keyup();
        


        Plus qu'à raccourcir tout ça, enlever les suites de tirets et limiter le nombre de caractères et le tour est joué :)
        • Partager sur Facebook
        • Partager sur Twitter
          23 août 2011 à 20:31:12

          Je pense pense pas que ça soit moche, par contre je pense que tu peux chainer tes méthode :)
          • Partager sur Facebook
          • Partager sur Twitter
            23 août 2011 à 21:00:53

            Citation : Biniou

            value = value.replace(/[\?\!\&\~\,\.\(\)\[\]\:\;\#\$]/g,"");
            

            Ah donc tu veux enlever tous les caracteres non alphanumeriques ?
            Il te manque le *, le / ...
            Ou alors tu fais l'inverse ?
            value = value.replace( /[^a-z0-9]/g, '' );
            
            • Partager sur Facebook
            • Partager sur Twitter
              24 août 2011 à 11:41:32

              Citation : Cryde

              Je pense pense pas que ça soit moche, par contre je pense que tu peux chainer tes méthode


              Oui, c'est même mieux, en tout cas plus joli. Mais qu'en est-il des performances ? Bon, je ne suis pas à ça près, mais c'est tout de même mieux.


              Citation : xavierm02

              value = value.replace( /[^a-z0-9]/g, '' );
              

              L'idée est carrément mieux. Il y a aussi le caractère spécial \W qui permet de capturer un caractère non alphanumérique.
              value = value.replace(/\W+/g, '-')
              


              Sinon, voici mon code à l'état actuel :

              $("#title").keyup(function () {
                var value = $(this).val();
                // 1
                value = value.toLowerCase();
               
                // 2
                value = value.replace(/[àáâãäå]/g,"a").replace(/[èéêë]/g,"e").replace(/[ìíîï]/g,"i").replace(/[ðòóôõö]/g,"o").replace(/[ùúûü]/g,"u").replace(/[ýÿ]/g,"y").replace(/[ç]/g,"c");
               
                //3
                value = value.replace(/\W+/g, '-')
                $("#url").val(value);
              }).keyup();
              


              Ainsi :
              • 1- Tous les caractères en minuscule
              • 2- Remplacement des accents
              • 3- Remplacement des caractères non alphanumériques


              J'aimerai modifier l'étape 2, trop moche... Et peut-il y avoir un lien avec l'encodage ? Je veux dire : j'ai écris les accents de mes regex dans mon fichier, encodé en utf-8, affiché dans une page utf-8 et enregistrée dans une base utf-8. De ce côté là, tout va bien. mais est-ce que l'utilisateur peut avoir un navigateur qui envoie des POST dans un autre encodage ?

              En tout cas, merci à vous !
              • Partager sur Facebook
              • Partager sur Twitter
                24 août 2011 à 20:14:58

                Non je ne pense pas ! :)



                $("#title").keyup(function () {
                
                	var value = $(this).val()
                	.toLowerCase()
                	.replace(/[àáâãäå]/g,"a")
                	.replace(/[èéêë]/g,"e")
                	.replace(/[ìíîï]/g,"i")
                	.replace(/[ðòóôõö]/g,"o")
                	.replace(/[ùúûü]/g,"u")
                	.replace(/[ýÿ]/g,"y")
                	.replace(/[ç]/g,"c");
                	.replace(/\W+/g, '-');
                
                	$("#url").val(value);
                }).keyup();
                


                Tu peux même faire comme ça je pense :)
                Mais à vérifier, et je pense pas que ça soit moche ou quoi que se soit ^^

                Mais je peux me tromper !
                • Partager sur Facebook
                • Partager sur Twitter

                Réécriture champs texte type url rewriting

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown