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")
$("#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
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é
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 ?
× 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.
Mes projets : WhoisRedJohn, fatidique et MusicAll. Mon Github
Mes projets : WhoisRedJohn, fatidique et MusicAll. Mon Github
Mes projets : WhoisRedJohn, fatidique et MusicAll. Mon Github