Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
#STATISTIKA
"Oliy liga 2025/26" mavsumining uch turi ortda qoldi. Jamoamiz 3 ta shaharda o'tkazilgan tur uchrashuvlarida jami 9 uchrashuvda maydonga tushib, 8 bor g'alaba qozondi va 1 bor durang natija qayd etdi.
9 ta bahsda raqiblar darvozasini 58 bor ishg'ol qilishga erishdik. Keling kiritilgan gollar mualliflari va ularga assistentlik qilgan futzalchilar nomlarini surat orqali batafsil ko'rib chiqamiz.
Telegram|Facebook|Instagram | Uzum
2025-yil yanvar oyida O‘zbekistonda eng ko‘p yuklab olingan ilovalar quyidagilar bo‘ldi:
1. Temu (sentyabr oyidan beri Google Play va App Store’da yetakchilik qilmoqda).
2. ChatGPT - Google Play’da ikkinchi, App Store’da to‘rtinchi o‘rinni egalladi.
3. Telegram va Instagram eng mashhur messenjer va ijtimoiy tarmoq sifatida tan olindi.
4. Payme - Google Play’da beshinchi va App Store’da oltinchi o‘ringa joylashdi.
5. Soliq va Uzum Market - eng yuqori reytingga kirgan ikkita milliy ilova bo‘ldi.
Credits: @UchadiUxladi
👉Bizning barcha loyihalar | #statistika
#Statistika
🏗Qurilish ishlarida qaysi hududlar peshqadam?
🤩 Milliy statistika qoʻmitasi maʼlumotlariga koʻra Oʻzbekistonda 2025-yilning yanvar-avgust oylarida jami 188,5 trln soʻmlik qurilish ishlari bajarilib, 2024-yilning mos davriga nisbatan 11,5 % ga oshgan.
🇺🇿 Ushbu koʻrsatkichning hududlar kesimidagi dinamikasi quyidagicha:
— Toshkent shahri — 56,2 trln soʻm;
— Toshkent viloyati — 21,4 trln soʻm;
— Buxoro viloyati — 12 trln soʻm;
— Samarqand viloyati — 11,5 trln soʻm;
— Fargʻona viloyati — 11,5 trln soʻm;
— Qashqadaryo viloyati — 10,7 trln soʻm;
— Surxondaryo viloyati — 9,5 trln soʻm;
— Namangan viloyati — 8,8 trln soʻm;
— Andijon viloyati — 8,6 trln soʻm;
— Navoiy viloyati — 7,9 trln soʻm;
— Xorazm viloyati — 7,8 trln soʻm;
— Qoraqalpogʻiston Resp. — 6,4 trln soʻm;
— Jizzax viloyati — 5,1 trln soʻm;
— Sirdaryo viloyati — 3,6 trln soʻm.
Rasmiy sahifalarimizga a'zo bo'ling👇
|
🌍Web|
📸Instagram|
💬Facebook|😎Telegram|
📹Youtube|
❗️Bu yil ideal bo'ldi: biz ishladik, siz qo'llab - quvvatladingiz, juda ko'payishdik.
#Statistika
Hammasi uchun rahmat! 2026-yilni ham kamida shunday o'tkazishimizga Alloh madodkor bo'lsin!
⚡Ana endi ishga yana-da kuchliroq yondashamiz!
Faoliyatimiz sizga oz bo‘lsa-da manfaatli bo‘lganidan mamnunmiz!
Kanalimiz:
https://t.me/Onatili_Izamov
❗️Bu yil ideal bo'ldi: biz ishladik, siz qo'llab - quvvatladingiz, juda ko'payishdik.
#Statistika
Hammasi uchun rahmat! 2026-yilni ham kamida shunday o'tkazishimizga Alloh madodkor bo'lsin!
⚡Ana endi ishga yana-da kuchliroq yondashamiz!
Kanalimiz:
https://t.me/Onatili_Izamov