Je travaille sur une application dans CodeIgniter et j'essaie de créer un champ sur un formulaire pour générer dynamiquement le slug d'URL. Ce que j'aimerais faire, c'est supprimer la ponctuation, la convertir en minuscules et remplacer les espaces par des tirets. Ainsi, par exemple, Shane's Rib Shack deviendrait shanes-rib-shack.
Voici ce que j'ai jusqu'ici. La partie minuscule était facile, mais le remplacement ne semble pas fonctionner du tout, et je n'ai aucune idée de supprimer la ponctuation:
$("#Restaurant_Name").keyup(function(){
var Text = $(this).val();
Text = Text.toLowerCase();
Text = Text.replace('/\s/g','-');
$("#Restaurant_Slug").val(Text);
});
javascript
jquery
regex
GSto
la source
la source
Réponses:
Je n'ai aucune idée d'où vient le terme `` limace '', mais on y va:
Le premier remplacement changera les espaces en traits d'union, le second remplacement supprime tout ce qui n'est pas alphanumérique, trait de soulignement ou trait d'union.
Si vous ne voulez pas que des choses "comme - ceci" se transforment en "comme --- ceci", vous pouvez utiliser celle-ci à la place:
Cela supprimera les traits d'union (mais pas les espaces) lors du premier remplacement, et lors du second remplacement, les espaces consécutifs seront condensés en un seul trait d'union.
Donc "comme - ceci" sort comme "comme-ceci".
la source
text.toLowerCase().replace(/ /g,'-').replace(/[-]+/g, '-').replace(/[^\w-]+/g,'');
place de l'option 2. L'option 2 changera "th - is" en "this".et essaye
original par: http://dense13.com/blog/2009/05/03/converting-string-to-slug-javascript/
EDIT: étendu pour plus de caractères spécifiques à la langue:
la source
ü
devrait être remplacé parue
, etc.å
cependant.İĞŞığş
desfrom
variables et les convertir en pourIGSigs
prendre en charge les caractères turcs.Tout d'abord, les expressions régulières ne doivent pas avoir de guillemets, donc '/ \ s / g' doit être / \ s / g
Afin de remplacer tous les caractères non alphanumériques par des tirets, cela devrait fonctionner (en utilisant votre exemple de code):
Cela devrait faire l'affaire...
la source
J'ai trouvé une bonne solution complète pour l'anglais
Quelques exemples d'utilisation:
Merci à Andrew Stewart
la source
J'espère que cela peut sauver la journée de quelqu'un ...
la source
Tout ce dont vous aviez besoin était un plus :)
la source
Jetez un œil à cette fonction slug pour nettoyer les URL, développée par Sean Murphy à https://gist.github.com/sgmurphy/3095196
la source
Je crée un plugin à implémenter dans la plupart des langues: http://leocaseiro.com.br/jquery-plugin-string-to-slug/
Utilisation par défaut:
Est très facile a stringToSlug jQuery Plugin
la source
* basé sur https://gist.github.com/mathewbyrne/1280286
maintenant vous pouvez transformer cette chaîne:
dans:
application à votre code:
la source
La combinaison d'une variété d'éléments des réponses ici avec normaliser fournit une bonne couverture. Gardez l'ordre des opérations pour nettoyer progressivement l'URL.
normlize('NFD')
divise les caractères accentués en leurs composants, qui sont des lettres de base plus des signes diacritiques (la partie accentuée).replace(/[\u0300-\u036f]/g, "")
purge tous les signes diacritiques, laissant les lettres de base par elles-mêmes. Le reste est expliqué avec des commentaires en ligne.la source
Vous pouvez utiliser votre propre fonction pour cela.
essayez-le: http://jsfiddle.net/xstLr7aj/
la source
La réponse acceptée ne répondait pas à mes besoins (elle autorise les traits de soulignement, ne gère pas les tirets au début et à la fin, etc.), et les autres réponses avaient d'autres problèmes qui ne correspondaient pas à mon cas d'utilisation, alors voici la fonction slugify Je suis venu avec:
Cela transformera 'foo !!! BAR _-_-_ baz-' (notez l'espace au début) en
foo-bar-baz
.la source
Vous voudrez peut-être jeter un coup d'œil au plugin speakURL et vous pourrez alors:
la source
Encore un autre. Court et garde les caractères spéciaux:
imaginação é mato => imaginacao-e-mato
la source
Méthode de génération de slug plus puissante sur JavaScript pur. Il prend essentiellement en charge la translittération pour tous les caractères cyrilliques et de nombreux trémas (allemand, danois, français, turc, ukrainien, etc.) mais peut être facilement étendu.
la source
Pour les personnes utilisant déjà
lodash
La plupart de ces exemples sont vraiment bons et couvrent de nombreux cas. Mais si vous `` savez '' que vous n'avez que du texte anglais, voici ma version qui est super facile à lire :)
_.words(_.toLower(text)).join('-')
la source
Eh bien, après avoir lu les réponses, j'ai trouvé celle-ci.
la source
Remarque: si vous ne vous souciez pas d'un argument contre la réponse acceptée et que vous cherchez simplement une réponse, sautez la section suivante, vous trouverez ma réponse proposée à la fin
la réponse acceptée a quelques problèmes (à mon avis):
1) comme pour le premier extrait de fonction:
aucun égard pour plusieurs espaces blancs consécutifs
contribution:
is it a good slug
reçu:
---is---it---a---good---slug---
attendu:
is-it-a-good-slug
pas de considération pour plusieurs tirets consécutifs
contribution:
-----is-----it-----a-----good-----slug-----
reçu:
-----is-----it-----a-----good-----slug-----
attendu:
is-it-a-good-slug
veuillez noter que cette implémentation ne gère pas les tirets externes (ou les espaces blancs d'ailleurs) qu'il s'agisse de plusieurs caractères consécutifs ou de caractères singuliers qui (pour autant que je comprends les slugs et leur utilisation) ne sont pas valides
2) comme pour le deuxième extrait de fonction:
il prend en charge les multiples espaces consécutifs en les convertissant en un seul
-
mais ce n'est pas suffisant car les espaces externes (au début et à la fin de la chaîne) sont gérés de la même manière, doncis it a good slug
retournerait-is-it-a-good-slug-
il supprime également complètement les tirets de l'entrée qui convertit quelque chose comme
--is--it--a--good--slug--'
enisitagoodslug
, l'extrait de code dans le commentaire de @ ryan-allen s'en charge, laissant le problème des tirets externes non résolumaintenant je sais qu'il n'y a pas de définition standard pour les slugs, et la réponse acceptée peut faire le travail (que l'utilisateur qui a posté la question recherchait), mais c'est la question SO la plus populaire sur les slugs dans JS, donc ces problèmes devait être souligné, aussi (concernant faire le travail! ) imaginez taper cette abomination d'une URL (
www.blog.com/posts/-----how-----to-----slugify-----a-----string-----
) ou même simplement être redirigé vers elle au lieu de quelque chose comme (www.blog.com/posts/how-to-slugify-a-string
), je sais que c'est un cas extrême mais bon c'est ce que teste sont pour.une meilleure solution , à mon avis, serait la suivante:
maintenant, il y a probablement un ninja RegExp qui peut convertir cela en une expression à une seule ligne, je ne suis pas un expert en RegExp et je ne dis pas que c'est la solution la meilleure ou la plus compacte ou celle avec les meilleures performances mais j'espère qu'il pourra faire le travail.
la source
Ce code fonctionne
la source
Cela m'a aidé avec le même problème!
la source
cela fonctionne bien pour moi.
Je l'ai trouvé sur CodeSnipper
la source
la source