Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Yangi O‘zbekistonda ijtimoiy himoya — eng ustuvor vazifa!
"Yangi O‘zbekiston" bog‘ida o‘tkazilgan Mustaqillikning 34 yilligiga bag‘ishlangan bayram tadbirida Prezidentimiz Shavkat Mirziyoyev ijtimoiy himoya masalalariga alohida to‘xtalib o‘tdi.
📍Har bir fuqaroning munosib hayot kechirishi,
📍 yordamga muhtoj qatlamlarni qo‘llab-quvvatlash,
📍yoshlar va keksalarning manfaatlarini himoya qilish,
📍 ijtimoiy adolatni ta’minlash — davlat siyosatining bosh yo‘nalishi ekanini ta’kidladi.
Bugun mamlakatimizda shakllanayotgan samarali va adolatli ijtimoiy himoya tizimi xalqimizning ertangi kunga bo‘lgan ishonchini yanada mustahkamlamoqda.
#YangiO‘zbekiston #IjtimoiyHimoya#Mustaqillik34
https://t.me/IHMA_matbuotkotibi
📚🔔 Al-Beruniy nomidagi xalqaro maktab-internatida yangi o‘quv yili boshlandi!
Bugun maktabimizda ilk qo‘ng‘iroq yangradi. O‘quvchilarimiz yangi bilimlar sari ilk qadamlarini tashladilar.
Tadbirni Ixtisoslashtirilgan ta'lim muassasalari agentligi Direktori S.Shakirova ochib berdi.
Al-Beruniy nomidagi xalqaro maktab-internati o‘quvchilariga yangi o‘quv yilida ulkan yutuqlar tilaymiz!
@alberuniyuzb
#AlBeruniyMaktabi#BirinchiQo‘ng‘iroq #YangiO‘quvYili
Mustaqillik – xalqimizning eng ulug‘ bayrami!
Bugun biz 34 yil oldin qo‘lga kiritilgan eng buyuk ne’mat – Ozod va Mustaqil O‘zbekistonning tantanasini nishonlamoqdamiz. Bu yillar davomida yurtimiz ulkan marralarni zabt etdi, eng muhimi – kelajagimiz egalari bo‘lgan yoshlar uchun imkoniyatlar kengaydi.
Davlatimiz rahbari tashabbuslari bilan ta’lim sohasida amalga oshirilayotgan islohotlar bugun har bir o‘quvchi uchun yangi ufqlarni ochmoqda.
Shu islohotlarning yorqin ifodasi sifatida bizning Al-Beruniy nomidagi xalqaro maktab internati ham bu yil o‘z faoliyatini boshladi. Maktab o'quvchilarining ko‘zida Vatanimizga sadoqat, ilmga chanqoqlik va buyuk orzularni ko‘raman.
Biz ishonamiz: ertangi kunning buyuk olimlari, rahbarlari, yangilik yaratuvchi yosh avlod mana shu ta’lim dargohlaridan yetishib chiqadi.
🇺🇿 Mustaqillik barchamizga shodlik, kuch va ertangi kunimizga ishonch bag‘ishlasin!
@alberuniyuzb
#Mustaqillik34#YangiO‘zbekiston #AlBeruniyMaktabi#KelajakUchun
“Yangi O‘zbekiston” universiteti talabalari ICPC NERC 2025–2026 finalida munosib ishtirok etdi!
🌍 ICPC 2025–2026 Northern Eurasia Finals — Dasturlash bo‘yicha dunyodagi eng nufuzli musobaqalardan biri bo‘lgan ICPC’ning mintaqaviy final bosqichida “Yangi O‘zbekiston” universiteti talabalari yana bir bor o‘z salohiyatini namoyon etdi.
🏅 Musobaqa yakunlariga ko‘ra:
— 2 ta jamoamiz II-darajali diplom bilan taqdirlandi;
— yana 2 ta jamoamiz III-darajali diplom sohibiga aylandi.
👏 “Yangi O‘zbekiston” universiteti jamoasi barcha ishtirokchi talabalarni va ularning ustozlarini samimiy tabriklaydi hamda kelgusi ICPC bosqichlarida yanada yuksak marralarni zabt etishlariga ishonch bildiradi!
🔁English
➖➖➖➖➖➖➖➖➖➖➖➖
#ICPC#dasturlash#talabalar#YangiO‘zbekistonUniversiteti #algoritmika#musobaqa
⬇️ Biz ijtimoiy tarmoqlarda:
Veb-sayt | Telegram | Instagram | Facebook
#AyollarEhtiromi
#YangiO‘zbekiston
#E’tirof
#TumanFaxri
#Mo‘tabarAyollar
#8Mart
#AyollarBayrami
Tumanimiz ayollaridan 4 nafari yuksak davlat mukofotlari bilan taqdirlandi🌸
Mamlakatimizda mo‘tabar ayol zotiga ulkan ehtirom ko‘rsatish, ularning davlat va jamiyat hayotidagi o‘rni hamda nufuzini oshirish borasida izchil ishlar amalga oshirilmoqda. O‘zining samarali mehnati, boy bilim va tajribasi bilan yurtimizda olib borilayotgan keng ko‘lamli islohotlarda faol ishtirok etib, Yangi O‘zbekistonni barpo etish va xalqimiz farovonligini yuksaltirish yo‘lida ibrat bo‘lib kelayotgan ko‘plab ayollarimiz Prezidentimiz tomonidan munosib taqdirlandi.
Quvonarlisi, tumanimizdan ham 4 nafar faol ayol ana shunday yuksak mukofotlarga loyiq ko‘rildi:
🔹“Gavhar” mahallasi “Oqila ayollar” harakati rahbari Muattar Hamrayeva — “Do‘stlik” ordeni bilan;
🔹 Respublika shoshilinch tibbiy yordam ilmiy markazi direktorining davolash ishlari bo‘yicha o‘rinbosari Muxamedova Barno Farxadovna — II darajali “Salomatlik” ordeni bilan;
🔹 Toshkent shahridagi “Iffatli kelin” o‘quv markazi ta’sischisi Karimova Barno Patxullayevna — II darajali “Sog‘lom avlod uchun” ordeni bilan;
🔹 Chilonzor tumanidagi 39-sonli oilaviy poliklinika rahbari Dildora Mamatxonova — “Mo‘tabar ayol” ko‘krak nishoni bilan taqdirlandilar.
Davlat mukofoti sovrindorlarini tuman hokimi Saidqahhor Xolxo‘jayev ham yuksak e’tirof bilan qutlab, ularga "Tashakkurnoma"lar topshirdi.
Yuksak mukofotlarga sazovor bo‘lgan tumanimiz vakillarini tuman hokimligi nomidan samimiy tabriklaymiz. Ularning kelgusidagi faoliyatlarida ulkan zafarlar va muvaffaqiyatlar tilaymiz!👏👏👏👏👏
🔵@Chilonzor_tumani_hokimligi
UZ | Янги сиёсий блок – “Тараққиёт блоки”!
Парламентда янги тарих бошланди!
Ўзбекистон Либерал-демократик партияси - УзЛиДеП (O‘zLiDeP) ва “Миллий тикланиш” партиялари бирлашиб, 93 депутат билан “Тараққиёт блоки”ни тузди – ва бу энди кўпчилик овоз демакдир!
Нима учун бу муҳим?
⚡ Президент сиёсатини қўллаб-қувватлаш
⚡ Экономик эркинлик ва хусусий мулкни ҳимоя қилиш
⚡ Таълим, тиббиёт, солиқ ва пенсия тизимларида ислоҳотлар
⚡ Сўз эркинлигини ҳимоя қилиш ва очиқлик сиёсатини давом эттириш
Блокнинг мақсади – ишончли, эркин ва замонавий Ўзбекистон қуришга ҳисса қўшиш!
#TaraqqiyotBloki#Ozlidep#MilliyTiklanish#ParlamentYangiliklari#YangiO‘zbekiston
---
RU | Новый политический альянс – “Блок Развития”!
В парламенте — новое объединение сил!
Партии O‘zLiDeP и "Милий тикланиш” подписали соглашение и объединили 93 депутата в “Блок Развития”. Это – парламентское большинство!
Почему это важно?
⚡ Поддержка курса Президента
⚡ Защита частной собственности и экономических свобод
⚡ Реформы в образовании, медицине, налогах и пенсиях
⚡ Поддержка свободы слова и политики открытости
Цель блока — строить сильный, свободный и современный Узбекистан вместе с народом!
#БлокРазвития#Парламент2025#МолодежьВыбираетБудущее#Ozlidep#MilliyTiklanish
@bahodir_schastlivchik