Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
#Zakovat musobaqa jarayonidan.
Amir Temur tavalludining 690 yilligi munosabati bilan Shahrixon tuman ixtisoslashtirilgan maktabida 7–8-sinf o‘quvchilari o‘rtasida“Zakovat” klubi hamkorligida “Zakovat” o‘yini tashkil etildi.
🤝 Musobaqa o‘zaro hamkorlikni mustahkamlash, nazariy bilimlar bilan amaliy ko‘nikmalar uyg‘unligini ta’minlash maqsadida o‘tkazildi.
💪 6 ta jamoa ishtirok etdi.
Do‘stona raqobat ruhida kechgan o‘yin yakunida quyidagi jamoalar g‘olib va sovrindorlar qatoridan o‘rin oldi:
🥇1-o‘rin: Zukkolar jamoasi;
🥈2-o‘rin: Udaburonlar jamoasi;
🥉3-o‘rin: Kimyogarlar hamda Burgutlar jamoasi.
“Zakovat” intellektual musobaqasi o‘tkazildi. Mazkur tadbirda o‘quvchilar o‘z bilimlari, tezkor fikrlashi va jamoaviy ishlash ko‘nikmalarini namoyon etdilar. Musobaqa yuqori saviyada tashkil etilib, ishtirokchilar o‘rtasida qizg‘in va murosasiz bahslar bo‘lib o‘tdi. G‘olib va sovrindorlar munosib taqdirlandilar.
TELEGRAM✍
#zakovat
Hazil savol.
O‘rta asrlarda Yevropada inkvizitsiya sudlari ayollarni jodugarlikda ayblab, qatl etish uchun asoslardan biri sifatida ularning vaznini tekshirgan. Agar ayblanuvchining vazni 50 kg dan ortiq bo‘lsa, ayblanuvchi oqlangan. Aks holda, qatl etilgan.
Diqqat, savol: Nima uchun inkvizitsiya sudlari jodugarlikda ayblanuvchi ayollarning vazni 50 kg dan kam bo‘lishiga e’tibor bergan?
#zakovat
Bilim va tafakkur sinovi
“Sho‘rtan gaz kimyo majmuasi”da “Ayol baxtli bo‘lsa, jamiyat baxtlidir” shiori ostida xotin-qizlarning ijtimoiy faolligini yanada oshirish, ularning bo‘sh vaqtini mazmunli tashkil etish hamda bilim va salohiyatini namoyon etishlari uchun sharoit yaratish maqsadida “Zakovat” intellektual o‘yini tashkil etildi.
👇Bizni kuzating
🌐web-sayt | 📹instagram|💬telegram | 📺youtube | 💬facebook
#Zakovat
📣 Kecha O‘zbekiston Respublikasi Madaniyat vazirligi huzuridagi Kinematografiya agentligida Agentlik va tizim tashkilotlari hamda kinoijodkorlar ishtirokida “Zakovat” intellektual o‘yini tashkil etildi.
⚡️ Mazkur tadbir Prezidentimizning 2026-yil 24-fevral kuni yoshlar bilan ochiq muloqati davomida har haftaning payshanba kuni “Rahbar va yoshlar kuni”ni tizimli ravishda tashkil etish yuzasidan bergan topshiriqlari hamda O‘zbekiston Respublikasi Prezidentining 2022-yil 20-yanvardagi “Zakovat” intellektual o‘yinini aholi o‘rtasida ommaviy-ma’rifiy harakatga aylantirish va boshqa intellektual o‘yinlarni rivojlantirishga oid chora-tadbirlar to‘g‘risida” PQ-96-sonli qarori ijrosini ta’minlash maqsadida o‘tkazildi.
✨ Tadbirda Agentlikning barcha tizim tashkilotlaridan jamoalar faol ishtirok etishdi. Musobaqa jarayonida jamoalar “Zakovat” intellektual klubi tomonidan taqdim etilgan savollarga javob berishdi.
Musobaqa yakunida Hakamlar hay’atining xulosasiga ko‘ra, “Kinoijodkorlar” jamoasi 1-o‘rin, “Renessans” jamoasi 2-o‘rin, “O‘zbekfilm” jamoasi 3-o‘rinni egalladi. “Yoshlik”, “Kinosaroy”, “Kinofond” hamda “VGIK” jamoalari rag‘batlantiruvchi o‘ringa munosib deb topildi.
✨ G‘oliblarga tashkilotchilar tomonidan faxriy yorliq va esdalik sovg‘alari taqdim etildi.
🔂Milliy kino san'ati saroyi Axborot xizmati
Web-site|Telegram| Instagram|Facebook
#zakovat
“Zakovat” o‘yinida g‘oliblar aniqlandi
Mustaqilligimizning 34 yilligi munosabati bilan Xiva shahrida “O‘zbekneftgaz” AJ va tizim tashkilotlari o‘rtasida “Zakovat QUIZ” intellektual o‘yinining Final bosqichi bo‘lib o‘tdi.
👉Batafsil
____
Определены победители интеллектуальной игры «Закават»
В связи с 34-летием Независимости нашей страны в Хиве состоялся финальный этап интеллектуальной игры «Заковат QUIZ» между системными предприятиями АО «Узбекнефтегаз».
👉Подробно
👇Bizni kuzating:
🌐web-sayt |
📷instagram |
👉telegram |
▶️youtube |
💬facebook
#Zakovat
🗓 Joriy yilning27-sentabr sanasida viloyat Yoshlar ishlari agentligi binosida Respublika Maʼnaviyat va maʼrifat markazi Xorazm viloyat bo‘limi hamda "Zakovat intellektual klubi" NNT Xorazm viloyat klubi bilan hamkorlikda oliy ta’lim muassasalari talabalari o‘rtasida “Zakovat” intellektual o‘yini bo‘lib o‘tdi.
🔽Bellashuv davomida talabalar bilim va tafakkurini sinovdan o‘tkazib, o‘z jamoaviy hamjihatligini namoyish etishdi.Yakunda g‘olib jamolarga esdalik sovg‘alar topshirildi.
Bizni ijtimoiy tarmoqlarda kuzating!
| Telegram | Facebook | Youtube|Instagram|
#zakovat
“KIUT ZAKOVATI: BILIM VA TAFAKKUR SINOVI”
🇺🇿Toshkent Kimyo xalqaro universiteti Namangan filialida"Talabalar oyligi" doirasida "Zakovat" intellektual o'yinlarining 1-tur bosqichi bo'lib o'tdi.
Ikki kunlik murosasiz kechgan musobaqa davomida 45 ta jamoa viloyat zakovat boshlovchisi Shavkatbek Shokirov tomonidan berilgan turli mavzulardagi 20 dan ortiq savollarga javoblar berishdi. Musobaqalarning keyingi turlari har oyda o‘tkazilishi rejalashtirilgan, talabalarimizni faollikka chorlab qolamiz.
Bizni kuzating👇
🌐Website I ✅Telegram I 🌐Instagram I 📹Youtube I
#zakovat
🇺🇿Termiz davlat universiteti Yuridik fakulteti Yoshlar ittifoqi tashabbusi bilan Yuristlar ligasi zakovat o'yinlariga start berildi.
🧠 Musobaqa 3 turdan iborat bo‘lib, unda Yuridik fakultetining 1-bosqich kunduzgi va kechki ta’lim shaklida tahsil oluvchi talabalari ishtirok etdi. Har bir guruh o‘z sharafini himoya qilgan holda, jamoalar o‘rtasida qizg‘in va murosasiz bahslar kechdi.
✅ Bellashuvlar yakuniga ko‘ra eng yuqori natija qayd etgan jamoalar keyingi bosqichga yo‘llanma oldi.
🕊Telegram | 📱Instagram
📱Facebook | 📺You tube
#zakovat
KIUT da Zakovat ❗️
✅Toshkent Kimyo xalqaro universiteti Namangan filialida talabalarning bo'sh vaqtlarini mazmunli o'tkazish maqsadida talabalar turar joyida istiqomat qiluvchi talaba-yoshlar o'rtasida "Zakovat" intellektual o'yinlarining 1-tur bosqichi bo'lib o'tdi.
Musobaqada jami 11 ta jamoa turli mavzulardagi 20 dan ortiq savollarga javob berishdi. Qiziqarli va murosasiz o'tgan bellashuv so'nggida "Pedagoglar" jamoasi g'oliblikni qo'lga kiritdi.
G‘oliblarga diplom va universitet rahbariyatining esdalik sovg'alari taqdim etildi.
Bizni kuzating
🌐Website I ✅Telegram I 🌐Instagram I 📹Youtube I
#zakovat
✅Yuridik fakulteti davlat va huquq asoslari kafedrasi o'qituvchisi Djurayeva O'lmas Choriyevna tomonidan Oʻtkir Hoshimovning "Dunyoning ishlari" asari yuzasidan zakovat o'yini tashkil qilindi.
🗣 Tashkil qilingan tanlovda sotsiologiya ta’lim yo'nalish talabalari mantiqiy va ilmiy yondashuv asosidagi savollarga qizg'in va murosasiz bahslar bilan javob berishdi.
🕊Telegram | 📱Instagram | 📱Facebook | 📺You tube
#Zakovat
🧠 Zakovat Arenada TMK jamoalari yetakchilar safida
Bugun Zakovat arenada O‘zbekiston Respublikasi Tog‘-kon sanoati va geologiya vazirligi tizimidagi xodimlar o‘rtasida “Zakovat” intellektual musobaqasi bo‘lib o‘tdi.
✅ Qizg‘in raqobat ruhida kechgan ushbu musobaqada TMK jamoalari ham faol ishtirok etib, yuqori natijalarni qayd etishdi.
✔️TMKning “Titan” va “Lantan” guruhlari 50 ta jamoa ishtirok etgan bellashuvda yuqori ballar to‘plab, mos ravishda 5- va 6-o‘rinlarni egallashdi.
🔥TMK aqlli insonlar jamoasi!
🫥🫥🫥
📎На русском языке
📎In English
🫥🫥🫥
✅TMK matbuot xizmati
🌐Web-site|🔵Facebook |📷Instagram| 🎰LinkedIn|🎬Youtube|🚀Telegram