Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для URL, имени файла, имени объекта в каком-то софте и тд. Требования совместимости простые: в тексте должны быть только допустимые символы. Обычно это a-z, 0-9 и "_" или "-". То есть, только прописные буквы латинского алфавита и цифры (как пример).
Допустим, нам нужно название статьи в блоге преобразовать в slug для добавления его в URL этой статьи. Как это лучше всего сделать?
В Django по умолчанию есть готовая функция slugify для таких случаев.
Но я её никогда не использую. Почему? Потому что её недостаточно!
Приведём пример
>>> from django.utils.text import slugify
>>> slugify('This is a Title')
'this-is-a-title'
Пока всё отлично
>>> slugify('This is a "Title!"')
'this-is-a-title'
Спец символы удалились, всё хорошо.
>>> slugify('Это заголовок статьи')
''
Вот и приехали 😢. Если текст не английский то буквы просто игнорируются. Можно это поправить
>>> slugify('Это заголовок статьи', allow_unicode=True)
'это-заголовок-статьи'
Но тогда мы не вписываемся в условие. У нас появилась кириллица в тексте.
Так как я часто пишу сайты для русскоязычных пользователей эта проблема весьма актуальна. Я не использую стандартную функцию и всегда пишу свою.
Оригинал я не беру в расчёт и пишу полностью свою функцию. И так, по порядку:
🔸1. Исходный текст:
>>> text = 'Мой заголовок №10 😁!'
Взял специально посложней со специальными символами.
🔸2. Транслит
Необходимо сделать транслит всех символов в латиницу. Здесь очень выручает библиотека unidecode. Помимо простого транслита кириллицы в латиницу она умеет преобразовывать спец символы и иероглифы в текстовые аналоги.
from unidecode import unidecode
>>> unidecode("Ñ Σ ® µ ¶ ¼ 月 山")
'N S (r) u P 1/4 Yue Shan'
Очень крутая библиотека, советую👍
В нашем случае получаем такое преобразование:
>>> text = unidecode(text)
>>> print(text)
'Moi zagolovok No. 10 !'
Отличный транслит. Смайл просто удалился, хотя я ждал что-то вроде :). Ну и ладно, всë равно невалидные символы.
А еще наш код уже поддерживает любой язык, будь то хинди или корейский.
🔸4. Фильтр символов
Unidecode не занимается фильтрацией по недопустимым символам. Это мы делаем в следующем шаге через regex. Просто заменим все символы на "_" если они вне указанного диапазона.
>>> text = re.sub(r'[^a-zA-Z0-9]+', '_', text)
>>> print(text)
'Moi_zagolovok_No_10_'
Символ "+" в паттерне выручает когда несколько недопустимых символов идут рядом. Все они заменяются на один символ "_".
🔸5. Slugify
Осталось удалить лишние символы по краям и сделать нижний регистр
>>> text = text.strip('_').lower()
>>> print(text)
'moi_zagolovok_no_10'
Получаем отличный slug! 😎
🌎 Полный код в виде функции.
______________
PS. Проверку что в строке остался хоть один допустимый символ я бы вынес в отдельную функцию.
#libs#tricks#django
#Sayohat
KELAJAKNING MA’NAVIY TAMAL TOSHI: YOSHLAR MUZEYLAR OLAMIDA
Toshkent viloyati prokurori Azamat Mirzayev tashabbusi bilan Toshkent tumanining yuzdan ziyod o‘g‘il-qizlari uchun unutilmas ma’rifiy sayohat tashkil etildi. Tuman prokurori v.v.b. Murodjon Shukrullayev boshchiligida yo‘lga chiqqan yosh avlod vakillari nafaqat poytaxtimizning diqqatga sazovor joylarini ko‘rishdi, balki millat tarixi va qonun ustuvorligining muqaddas dargohlariga qadam qo‘yishdi. Bu sayohat shunchaki sayr emas, balki yosh qalblarda milliy g‘urur va vatanparvarlik tuyg‘usini uyg‘otgan ma’naviy yurish bo‘ldi.
Islom sivilizatsiyasi markazi bo‘ylab qilingan sayohat o‘quvchilarda katta taassurot qoldirdi. Muhtasham binoning har bir naqshida muhrlangan buyuk ajdodlarimizning ilmiy merosi, allomalarimiz qoldirgan boy xazina yoshlar ko‘zida hayrat va iftixor uyg‘otdi. Tarixning zarrin sahifalari bilan yuzma-yuz kelgan yoshlar o‘zlarini ulug‘ ajdodlarning vorislari sifatida his qilib, ilm-fanga bo‘lgan ishtiyoqlari yana bir karra ortganini e’tirof etishdi.
Bosh prokuratura muzeyiga tashrif esa tadbirning eng muhim nuqtalaridan biri bo‘ldi. Bu yerda o‘quvchilar qonun ustuvorligi, adolat tamoyillari va prokuratura tizimining shakllanish tarixi bilan yaqindan tanishdilar. Adolat posbonlarining faoliyati haqidagi qiziqarli ma’lumotlar yoshlarning huquqiy ongini yuksaltirishga xizmat qildi. Ko‘pchilik yoshlarning ko‘zida aynan shu yerda kelajakda adolat yo‘lida xizmat qilish, yurt tinchligi va qonun himoyachisi bo‘lishdek ezgu maqsadlar shakllandi.
Mazkur tashabbusning asosiy maqsadi yoshlarni Vatanga muhabbat ruhida tarbiyalash va ularning dunyoqarashini kengaytirishdan iboratdir. Bugungi sayohatdan olingan bir olam taassurotlar o‘quvchilar xotirasida bir umr muhrlanib qoladi. Zero, o‘z tarixini bilgan, adolat va ilmning qadriga yetgan yoshlargina ertangi kunimizning ishonchli tayanchi bo‘la oladilar.
📸Jarayon fotolavhalarda.
✅Telegram💬Facebook📸Instagram📹YouTube🌍Website
#sayohat
🔹"Fargʻona suv taʼminoti" AJ direktori tashabbusi bilan sohada samarali faoliyat yuritayotgan xodimlar Samarqand va Buxoroga sayohat uyushtirildi. Aksiyadorlik jamiyati va kasaba uyushmasi qoʻmitasi hamkorligidagi 4 kunlik sahohat 45 nafardan iborat ishchi-xodimlarni yanada ruhlantirdi, desak mubolagʻa boʻlmaydi.
🔹 Qadimgi shahar ziyoratgohlari, undagi tarixiy eksponatlar va ajdodlarimizning yashash tarzi maʼlumotlari sayohatchilarga manzur boʻldi.
✅“Farg‘ona suv taʼminoti” AJ Axborot xizmati.
📱Telegram.✅Facebook.
🎞YoTube.🕊Twiter.
🌐Website.💧Instagram
#Sayohat
Muborak zavodi xodimlari uchun sayohat va davra suhbati oʻtkazildi
Tadbir Amir Temur tavalludining 690-yilligi munosabati bilan tashkil etilib, sayohat davomida ishtirokchilar tarixiy obidalar va muzey eksponatlari bilan yaqindan tanishtirildi.
👉Batafsil
👉Bizni kuzating
web-sayt | instagram|telegram | youtube | facebook
🧠💡📚#sayohat
🖼Qadimiy Samarqand shahriga 1 kunlik sayohat va ziyorat
⏰ Sayohat sanasi: 7-dekabr
📍 Tur dasturi:
🟢 Go‘ri Amir
🟢 Registon maydoni
🟢 Siyob bozori
🟢 Bibixonim maqbarasi
🟢 Xo‘ja Doniyor maqbarasi
🟢 Islom Karimov qabri
🟢 Shohi Zinda majmuasi
🟢 Samarqand City (Boqiy shahar)
⚡️Sayohat doirasida quyidagilar taqdim etiladi:
🟢Qulay va xavfsiz transfer
🟢 Gid xizmati
🟢 To‘liq tur organizatsiyasi
🟢Tarixiy obidalarga kirish imkoniyati
🟢 Do‘stona muhit va yaxshi kayfiyat
🟢 Fotosessiya
🚫 Narx ichiga kirmaydi:
🟢 Shaxsiy xarajatlar
🟢 Ovqatlanish
⏰ Toshkentdan chiqish: 05:00
⏰ Toshkentga qaytish: 22:00
📍 Ketish joyi: O‘zbekiston mehmonxonasi oldi (Amir Temur metro bekati mo‘ljal)
✅Narx bo'yichabatafsil ma’lumot va ro‘yxatdan o‘tish:YUTRIP
(ushbu xabar ostiga "+" belgisi qoldiring, sizga aloqaga chiqishadi!)
✏️Bizni kuzatishda davom eting!
🕊Telegram | 📱Instagram
📱Facebook | 📺YouTube
Qoyali togʻlar. Birinchi qism: Grand Lake atrofi
Kolorado shtatiga qilgan sayohatim haqida yozishni davom ettiraman. Bu safargisi koʻproq tabiat haqida. Amerikaning tabiati rostdan rang-barang va bunda oʻrmon va togʻlarga boy Kolorado oʻziga xos oʻrin egallaydi.
https://farhodjon.uz/travel/usa/colorado/grand-lake-and-summerland-park-june-2016/
#sayohat@FarLives🌀
Denver. Iyun 2016
Navbatdagi hikoya Kolorado shtatining Denver shahri haqida.
https://farhodjon.uz/travel/usa/colorado/denver-june-2016/
#sayohat@FarLives🌀
Yoʻlda: Kanzas-Siti → Denver. Iyun 2016.
2016-yilda Kanzas-Siti shahridan Denver shahriga borishdagi taassurotlarimni yozdim. Boshida AQShdagi magistrallar tizimi haqida maʼlumot berilgan.
https://farhodjon.uz/travel/routes/2016/kc-denver/
#sayohat@FarLives🌀
Nyu-York 2016-yilning mayida. Ikkinchi qism.
Sayohatning ikkinchi qismi. Bunisida ozroq Marin-Park, Brayton-Bich, Koni-Aylend sohili va yana Manhetten haqida. Biroz suvda ham sayr aralashgan.
Toʻliq versiyasi: https://farhodjon.uz/usa-nyc-2016-may-part-2
#sayohat
@FarLives🌀
Nyu-York 2016-yilning mayida. Birinchi qism.
Nyu-Yorkni haqiqiysiga aylanib chiqishga 2016-yilning may oyida imkoniyat boʻldi. Shu haqidagi hikoyaning birinchi qismi.
Telefonda koʻrish qulayroq va tejamliroq boʻlishi uchun Instant View integratsiya qilindi. Toʻliq (desktop) versiyasini oʻqiydiganlar uchun quyidagi havola bor.
https://farhodjon.uz/usa-nyc-2016-may-part-1
#sayohat