Ich arbeite an einer App in CodeIgniter und versuche, ein Feld in einem Formular so zu gestalten, dass der URL-Slug dynamisch generiert wird. Ich möchte die Interpunktion entfernen, in Kleinbuchstaben konvertieren und die Leerzeichen durch Bindestriche ersetzen. So würde beispielsweise Shane's Rib Shack zu Shanes-Rib-Shack.
Folgendes habe ich bisher. Der Teil in Kleinbuchstaben war einfach, aber das Ersetzen scheint überhaupt nicht zu funktionieren, und ich habe keine Ahnung, die Interpunktion zu entfernen:
$("#Restaurant_Name").keyup(function(){
var Text = $(this).val();
Text = Text.toLowerCase();
Text = Text.replace('/\s/g','-');
$("#Restaurant_Slug").val(Text);
});
javascript
jquery
regex
GSto
quelle
quelle
Antworten:
Ich habe keine Ahnung, woher der Begriff "Schnecke" stammt, aber jetzt geht es los:
Das erste Ersetzen ändert Leerzeichen in Bindestriche, das zweite Ersetzen entfernt alles, was nicht alphanumerisch, unterstrichen oder getrennt ist.
Wenn Sie nicht möchten, dass Dinge wie "dieses" zu "wie --- das" werden, können Sie stattdessen dieses verwenden:
Dadurch werden beim ersten Ersetzen Bindestriche (aber keine Leerzeichen) entfernt, und beim zweiten Ersetzen werden aufeinanderfolgende Leerzeichen zu einem einzigen Bindestrich zusammengefasst.
Also "wie - das" kommt als "wie-das" heraus.
quelle
text.toLowerCase().replace(/ /g,'-').replace(/[-]+/g, '-').replace(/[^\w-]+/g,'');
anstelle von Option 2 verwendet. Option 2 ändert "th - is" in "this".und versuche
Original von: http://dense13.com/blog/2009/05/03/converting-string-to-slug-javascript/
BEARBEITEN: erweitert für sprachspezifischere Zeichen:
quelle
ü
sollte durchue
usw. ersetzt werdenå
.İĞŞığş
umfrom
variable und wandeln sie inIGSigs
türkischen Zeichen zu unterstützen.Zuallererst sollten reguläre Ausdrücke keine umgebenden Anführungszeichen haben, also sollte '/ \ s / g' sein / \ s / g
Um alle nicht alphanumerischen Zeichen durch Bindestriche zu ersetzen, sollte dies funktionieren (unter Verwendung Ihres Beispielcodes):
Das sollte den Trick machen ...
quelle
Ich habe eine gute und vollständige Lösung für Englisch gefunden
Einige Beispiele dafür:
Vielen Dank an Andrew Stewart
quelle
Hoffe das kann jemandem den Tag retten ...
quelle
Alles was du brauchst war ein Plus :)
quelle
Schauen Sie sich diese Slug-Funktion an, um URLs zu bereinigen, die von Sean Murphy unter https://gist.github.com/sgmurphy/3095196 entwickelt wurden
quelle
Ich erstelle ein Plugin, das in den meisten Sprachen implementiert werden kann: http://leocaseiro.com.br/jquery-plugin-string-to-slug/
Standardverwendung:
Ist sehr einfach hat stringToSlug jQuery Plugin
quelle
* basierend auf https://gist.github.com/mathewbyrne/1280286
Jetzt können Sie diesen String transformieren:
in:
Anwendung auf Ihren Code:
quelle
Das Kombinieren einer Vielzahl von Elementen aus den Antworten hier mit Normalisieren bietet eine gute Abdeckung. Behalten Sie die Reihenfolge der Vorgänge bei, um die URL schrittweise zu bereinigen.
normlize('NFD')
unterteilt akzentuierte Zeichen in ihre Bestandteile, bei denen es sich um Grundbuchstaben plus diakritische Zeichen (der Akzentteil) handelt.replace(/[\u0300-\u036f]/g, "")
löscht alle Diakritika und lässt die Grundbuchstaben für sich. Der Rest wird mit Inline-Kommentaren erklärt.quelle
Sie können hierfür Ihre eigene Funktion verwenden.
Probieren Sie es aus: http://jsfiddle.net/xstLr7aj/
quelle
Die akzeptierte Antwort entsprach nicht meinen Anforderungen (sie erlaubt Unterstriche, behandelt keine Bindestriche am Anfang und Ende usw.), und die anderen Antworten hatten andere Probleme, die nicht zu meinem Anwendungsfall passten. Hier ist also die Slugify-Funktion Ich hatte die Idee dass:
Dies wird 'foo !!! BAR _-_-_ baz-' (beachten Sie das Leerzeichen am Anfang) in
foo-bar-baz
.quelle
Vielleicht möchten Sie sich das SpeakingURL-Plugin ansehen und dann können Sie einfach:
quelle
Noch einer. Kurz und hält Sonderzeichen:
imaginação é mato => imaginacao-e-mato
quelle
Leistungsstärkere Slug-Generierungsmethode für reines JavaScript. Es unterstützt grundsätzlich die Transliteration für alle kyrillischen Zeichen und viele Umlaute (Deutsch, Dänisch, Frankreich, Türkisch, Ukrainisch usw.), kann jedoch problemlos erweitert werden.
quelle
Für Leute, die bereits verwenden
lodash
Die meisten dieser Beispiele sind wirklich gut und decken viele Fälle ab. Aber wenn Sie wissen, dass Sie nur englischen Text haben, ist hier meine Version, die super einfach zu lesen ist :)
_.words(_.toLower(text)).join('-')
quelle
Nachdem ich die Antworten gelesen hatte, kam ich auf diese.
quelle
Hinweis: Wenn Sie sich nicht für ein Argument gegen die akzeptierte Antwort interessieren und nur nach einer Antwort suchen, überspringen Sie den nächsten Abschnitt. Meine vorgeschlagene Antwort finden Sie am Ende
Die akzeptierte Antwort hat einige Probleme (meiner Meinung nach):
1) wie für das erste Funktionsschnipsel:
Keine Rücksicht auf mehrere aufeinanderfolgende Leerzeichen
Eingang:
is it a good slug
empfangen:
---is---it---a---good---slug---
erwartet:
is-it-a-good-slug
Keine Rücksicht auf mehrere aufeinanderfolgende Striche
Eingang:
-----is-----it-----a-----good-----slug-----
empfangen:
-----is-----it-----a-----good-----slug-----
erwartet:
is-it-a-good-slug
Bitte beachten Sie, dass diese Implementierung keine äußeren Bindestriche (oder Leerzeichen) behandelt, unabhängig davon, ob es sich um mehrere aufeinanderfolgende Striche oder einzelne Zeichen handelt, die (soweit ich Slugs und ihre Verwendung verstehe) nicht gültig sind
2) wie für das zweite Funktionsschnipsel:
Es kümmert sich um die mehreren aufeinanderfolgenden Leerzeichen, indem es sie in einzelne konvertiert. Dies reicht
-
jedoch nicht aus, da äußere Leerzeichen (am Anfang und Ende der Zeichenfolge) gleich behandelt werden und daher zurückkehrenis it a good slug
würden-is-it-a-good-slug-
Außerdem werden Bindestriche vollständig aus der Eingabe entfernt, die so etwas wie
--is--it--a--good--slug--'
in konvertiertisitagoodslug
durch das Snippet im Kommentar @ ryan-allen kümmert sich darum, die äußeren Striche ungelöst obwohl ausstellen lassenJetzt weiß ich, dass es keine Standarddefinition für Slugs gibt und die akzeptierte Antwort möglicherweise den Job erledigt (den der Benutzer, der die Frage gestellt hat, gesucht hat), aber dies ist die beliebteste SO-Frage zu Slugs in JS, also diese Probleme Ich musste auch darauf hinweisen, dass ich (in Bezug auf die Erledigung der Aufgabe! ) mir vorstellen kann, diesen Gräuel einer URL einzugeben (
www.blog.com/posts/-----how-----to-----slugify-----a-----string-----
) oder einfach nur zu dieser umgeleitet zu werden, anstatt so etwas wie (www.blog.com/posts/how-to-slugify-a-string
). Ich weiß, dass dies ein extremer Fall ist, aber hey, das sind die Tests sind für.Eine bessere Lösung wäre meiner Meinung nach wie folgt:
Jetzt gibt es wahrscheinlich einen RegExp-Ninja, der dies in einen Einzeiler-Ausdruck umwandeln kann. Ich bin kein Experte für RegExp und ich sage nicht, dass dies die beste oder kompakteste Lösung oder die mit der besten Leistung ist aber hoffentlich kann es die Arbeit erledigen.
quelle
Das hat mir bei dem gleichen Problem geholfen!
quelle
Dieser Code funktioniert
quelle
Das funktioniert gut für mich.
Fand es auf CodeSnipper
quelle
quelle