Saya sedang mengerjakan aplikasi di CodeIgniter, dan saya mencoba membuat bidang pada formulir yang secara dinamis menghasilkan URL slug. Yang ingin saya lakukan adalah menghapus tanda baca, mengubahnya menjadi huruf kecil, dan mengganti spasi dengan tanda hubung. Jadi misalnya, Shane's Rib Shack akan menjadi shanes-rib-shack.
Inilah yang saya miliki sejauh ini. Bagian huruf kecil itu mudah, tetapi penggantinya tampaknya tidak berfungsi sama sekali, dan saya tidak punya ide untuk menghapus tanda baca:
$("#Restaurant_Name").keyup(function(){
var Text = $(this).val();
Text = Text.toLowerCase();
Text = Text.replace('/\s/g','-');
$("#Restaurant_Slug").val(Text);
});
javascript
jquery
regex
GSto
sumber
sumber
Jawaban:
Saya tidak tahu dari mana istilah 'siput' itu berasal, tapi di sini kita mulai:
Ganti pertama akan mengubah spasi menjadi tanda hubung, ganti kedua menghapus apa pun yang tidak alfanumerik, garis bawah, atau tanda hubung.
Jika Anda tidak menginginkan hal-hal "seperti - ini" berubah menjadi "seperti --- ini" maka Anda dapat menggunakan yang ini:
Itu akan menghapus tanda hubung (tetapi bukan spasi) pada penggantian pertama, dan pada penggantian kedua akan menyingkat spasi berturut-turut menjadi satu tanda hubung tunggal.
Jadi "seperti - ini" keluar sebagai "seperti-ini".
sumber
text.toLowerCase().replace(/ /g,'-').replace(/[-]+/g, '-').replace(/[^\w-]+/g,'');
bukannya opsi 2. Opsi 2 akan mengubah "th - adalah" menjadi "ini".dan coba
asli oleh: http://dense13.com/blog/2009/05/03/converting-string-to-slug-javascript/
EDIT: diperpanjang untuk karakter bahasa yang lebih spesifik:
sumber
ü
harus diganti denganue
, dll.å
.İĞŞığş
kefrom
variabel dan mengubahnya keIGSigs
untuk mendukung karakter Turki.Pertama-tama, ekspresi reguler tidak boleh memiliki tanda kutip di sekitarnya, jadi '/ \ s / g' harus / \ s / g
Untuk mengganti semua karakter non-alfanumerik dengan tanda hubung, ini harus berfungsi (menggunakan kode contoh Anda):
Itu harus melakukan trik ...
sumber
Saya menemukan solusi yang baik dan lengkap untuk bahasa Inggris
Beberapa contoh penggunaannya:
Terima kasih kepada Andrew Stewart
sumber
Semoga ini bisa menyelamatkan hari seseorang ...
sumber
Yang Anda butuhkan adalah nilai tambah :)
sumber
Lihatlah fungsi siput ini untuk membersihkan URL, yang dikembangkan oleh Sean Murphy di https://gist.github.com/sgmurphy/3095196
sumber
Saya membuat plugin untuk diterapkan di sebagian besar bahasa: http://leocaseiro.com.br/jquery-plugin-string-to-slug/
Penggunaan Default:
Sangat mudah memiliki plugin stringToSlug jQuery
sumber
* berdasarkan pada https://gist.github.com/mathewbyrne/1280286
sekarang Anda dapat mengubah string ini:
ke:
berlaku untuk kode Anda:
sumber
Menggabungkan berbagai elemen dari jawaban di sini dengan normalisasi memberikan cakupan yang baik. Jaga urutan operasi untuk membersihkan url secara bertahap.
normlize('NFD')
membagi karakter beraksen ke dalam komponen mereka, yang merupakan huruf dasar ditambah diakritik (bagian aksen).replace(/[\u0300-\u036f]/g, "")
membersihkan semua diakritik, meninggalkan huruf-huruf dasar sendiri. Selebihnya dijelaskan dengan komentar sebaris.sumber
Anda dapat menggunakan fungsi Anda sendiri untuk ini.
coba saja: http://jsfiddle.net/xstLr7aj/
sumber
Jawaban yang diterima tidak memenuhi kebutuhan saya (ini memungkinkan garis bawah, tidak menangani tanda hubung di awal dan akhir, dll.), Dan jawaban lain memiliki masalah lain yang tidak sesuai dengan kasus penggunaan saya, jadi inilah fungsi slugify Saya datang dengan:
Ini akan mengubah 'foo !!! BAR _-_-_ baz-' (perhatikan spasi di awal) menjadi
foo-bar-baz
.sumber
Anda mungkin ingin melihat plugin speakingURL dan kemudian Anda bisa:
sumber
Satu lagi. Pendek dan membuat karakter khusus:
imaginação é mato => imaginacao-e-mato
sumber
Metode generasi siput yang lebih kuat pada JavaScript murni. Ini pada dasarnya mendukung transliterasi untuk semua karakter Cyrillic dan banyak Umlaut (Jerman, Denmark, Prancis, Turki, Ukraina, dll.) Tetapi dapat dengan mudah diperpanjang.
sumber
Untuk orang yang sudah menggunakan
lodash
Sebagian besar contoh ini sangat bagus dan mencakup banyak kasus. Tetapi jika Anda 'tahu' bahwa Anda hanya memiliki teks bahasa Inggris, inilah versi saya yang super mudah dibaca :)
_.words(_.toLower(text)).join('-')
sumber
Nah, setelah membaca jawabannya, saya datang dengan yang ini.
sumber
Catatan: jika Anda tidak peduli dengan argumen yang menentang jawaban yang diterima dan hanya mencari jawaban, maka lewati bagian berikutnya, Anda akan menemukan jawaban yang saya usulkan di akhir
jawaban yang diterima memiliki beberapa masalah (menurut saya):
1) untuk cuplikan fungsi pertama:
tanpa memperhatikan beberapa spasi putih berturut-turut
memasukkan:
is it a good slug
diterima:
---is---it---a---good---slug---
diharapkan:
is-it-a-good-slug
tanpa memperhatikan beberapa strip berturut-turut
memasukkan:
-----is-----it-----a-----good-----slug-----
diterima:
-----is-----it-----a-----good-----slug-----
diharapkan:
is-it-a-good-slug
harap dicatat bahwa implementasi ini tidak menangani tanda hubung luar (atau spasi putih dalam hal ini) apakah itu beberapa karakter berturut-turut atau tunggal yang (sejauh yang saya mengerti siput, dan penggunaannya) tidak valid
2) seperti untuk potongan fungsi kedua:
itu menangani beberapa spasi putih berurutan dengan mengonversikannya menjadi satu
-
tetapi itu tidak cukup sebagai luar (pada awal dan akhir string) spasi putih ditangani sama, jadiis it a good slug
akan kembali-is-it-a-good-slug-
itu juga menghapus tanda hubung sama sekali dari input yang mengubah sesuatu
--is--it--a--good--slug--'
menjadiisitagoodslug
, potongan dalam komentar oleh @ ryan-allen menangani itu, meninggalkan masalah tanda hubung luar tidak terpecahkan meskipunsekarang saya tahu bahwa tidak ada definisi standar untuk siput, dan jawaban yang diterima mungkin mendapatkan pekerjaan (bahwa pengguna yang memposting pertanyaan sedang mencari) selesai, tapi ini adalah pertanyaan SO paling populer tentang siput di JS, jadi masalah-masalah itu harus ditunjukkan, juga (mengenai menyelesaikan pekerjaan! ) bayangkan mengetik URL yang keji ini (
www.blog.com/posts/-----how-----to-----slugify-----a-----string-----
) atau bahkan hanya diarahkan ke sana alih-alih seperti (www.blog.com/posts/how-to-slugify-a-string
), saya tahu ini adalah kasus ekstrem tapi hei itu tes apa adalah untuk.solusi yang lebih baik , menurut saya, adalah sebagai berikut:
sekarang mungkin ada ninja RegExp di luar sana yang dapat mengubah ini menjadi ekspresi satu-garis, saya bukan ahli dalam RegExp dan saya tidak mengatakan bahwa ini adalah solusi terbaik atau paling kompak atau yang dengan kinerja terbaik tapi semoga itu bisa menyelesaikan pekerjaan.
sumber
Kode ini berfungsi
sumber
Ini membantu saya dengan masalah yang sama!
sumber
ini bekerja untuk saya baik-baik saja.
Ditemukan di CodeSnipper
sumber
sumber