Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
📢Toshkentda WTT Youth Contender Tashkent 2025 davom etmoqda!
🏓 Bugun turnirning 2-kuni “Humo Arena”da bo‘lib o‘tmoqda. U11–U19 toifasidagi yosh tennischilar bahs olib bormoqda.
📅 Turnir 31-maygacha davom etadi.
📺 Jonli efir:
➡️ T1 WTT Youth Contender
➡️ T2 WTT Youth Contender
✅Kirish bepul!
#WTT#Tashkent2025#StolTennisi#HumoArena
Что-то происходит.
В воздухе — вибрации перемен.
Ты их слышишь?
Пульс ночи становится громче.
Мы создаём не просто событие —
мы запускаем волну.
Revolution.
Революция в том, как мы слушаем, чувствуем, отдыхаем.
Революция, которая давно живёт в Берлине, Лондоне, Сеуле.
Теперь — и в Ташкенте.
#RevolutionFestival#GlobalGroove#HumoArena#FestivalCulture
🔥HUMO FEST –30%🔥
Faqat bir kun!
📅11.11.2025
Imkonni qo‘ldan boy berma — barcha chiptalarga 30% chegirma!
🎟 Shoshil! Chiptalar soni cheklangan!
Chiptalar https://iticket.uz/ru/events/concerts/humofest-30-humo-fest
sayti va kassalarida mavjud.
#HumoFest#HumoArena#IticketUz#Chegirma#Sale#UzbekistanEvents
🍦Мороженое в подарок?
ДА! ДА! ДА!
Лови летнее настроение на катке HUMO ARENA!
Прокатись на коньках — и получи мороженое от «Мишки на Полюсе» ❄️🐻
Ммм… как же вкусно и прохладно! 😋
⠀
📍 Суббота и воскресенье
🕛 С 12:00 до 23:00
⠀
Каток + мороженое = идеальные выходные 💙
#HUMOarena#катокТашкент#лето2025#мороженоеподарок
🩵🩵🩵🩵🩵🩵🩵🩵🩵🩵🩵🩵🩵🩵
🍦Muzqaymoq sovg‘aga bormi?
HA! HA! HA!
Yozgi kayfiyatni HUMO ARENA muz maydonida ushla! ❄️⛸️
Konki uch — va “Mishka na Polyuse” muzqaymog‘ini sovg‘a sifatida qo‘lga kiriting! 🐻
⠀
Mmm… qanday lazzatli va yoqimli sovuq! 😋
⠀
📍Shanba va yakshanba
🕛12:00 dan 23:00 gacha
⠀
Muz maydoni + muzqaymoq = mukammal dam olish kunlari! 💙
#HUMOarena#Toshkentmuzmaydoni#yoz2025#muzqaymoqsovg‘a
🍦Мороженое в подарок?
ДА! ДА! ДА!
Лови летнее настроение на катке HUMO ARENA!
Прокатись на коньках — и получи мороженое от «Мишки на Полюсе» ❄️🐻
Ммм… как же вкусно и прохладно! 😋
⠀
📍 Суббота и воскресенье
🕛 С 12:00 до 23:00
⠀
Каток + мороженое = идеальные выходные 💙
#HUMOarena#катокТашкент#лето2025#мороженоеподарок
🩵🩵🩵🩵🩵🩵🩵🩵🩵🩵🩵🩵🩵🩵
🍦Muzqaymoq sovg‘aga bormi?
HA! HA! HA!
Yozgi kayfiyatni HUMO ARENA muz maydonida ushla! ❄️⛸️
Konki uch — va “Mishka na Polyuse” muzqaymog‘ini sovg‘a sifatida qo‘lga kiriting! 🐻
⠀
Mmm… qanday lazzatli va yoqimli sovuq! 😋
⠀
📍Shanba va yakshanba
🕛12:00 dan 23:00 gacha
⠀
Muz maydoni + muzqaymoq = mukammal dam olish kunlari! 💙
#HUMOarena#Toshkentmuzmaydoni#yoz2025#muzqaymoqsovg‘a
🌞 На улице +40, а у нас всегда прохладно!
Добро пожаловать на массовое катание в Humo Arena — лед, веселье и свежесть круглый год! ⛸️❄️
Приходи с друзьями, семьёй или любимыми —
охладись, отдохни и получи яркие эмоции прямо на льду!
📍 Humo Arena
🕒 Каток открыт Суббота-воскресенье с 12:00-23:00
🎟️ Билеты — доступны в кассе
☎️ +99894 800 55 55
#HumoArena#КатокТашкент#MassSkating#ОхладисьНаЛьду
🧊🧊🧊🧊🧊🧊🧊🧊🧊🧊🧊🧊
🌞 Tashqarida +40, bizda esa har doim salqin!
Humo Arena’da ommaviy konkilar — muz, quvonch va salqinlik yil bo‘yi! ⛸️❄️
Do‘stlaring, oilang yoki yaqinlaring bilan kel —
salqinlan, hordiq ol va muz ustida yorqin his-tuyg‘ularni boshdan kechir!
📍 Humo Arena
🕒 Katok har shanba-yakshanba soat 12:00 dan 23:00 gacha ochiq
🎟️ Chiptalar — kassa orqali mavjud
☎️ +99894 800 55 55
#HumoArena#ToshkentKatoki#OmmaviyKonkilar#MuzUstidaSalqinlan
❄️Сказка оживает на льду
«Аладдин и другие сказки 1001 ночи»
Фигуристы мирового уровня из России!
🕌 Восточная магия, чарующая музыка и фигуристы мирового уровня — всё это в невероятном шоу, от которого захватывает дух!
📅 Только один день — 3 января 2026
Погрузитесь в мир чудес, джиннов и настоящей ледовой магии!
🎟Билеты уже в продаже по летним ценам!
👉БИЛЕТЫ ЗДЕСЬ
#HUMOarena#АладдинНаЛьду#1001история#ТашкентАладдин#СказкаНаЛьду#ЛедовоеШоу#кудапойтивташкенте
❄ Ледовое удовольствие + сладкий бонус!
Катайся на коньках в HUMO ARENA и получи бесплатное мороженое от «Мишка на Полюсе» 🍦
⛸ Весёлый день на льду + освежающее лакомство — что может быть лучше?
📍 HUMO ARENA
🧊 Суббота-воскресенье
⏰ с 12:00-23:00
#humoarena#катокташкент#мороженоебесплатно#мишканаполюсе#ледовоенастроение
❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️
❄ Muzda suzish va shirin bonus!
HUMO ARENAda konkida suz — va “Mishka na Polyuse” dan bepul morojniy ol! 🍦
⛸ Muzda ajoyib vaqt o‘tkazing va o‘zingizni muzdek shirinlik bilan siylang — yana nima kerak?
📍 HUMO ARENA
🧊 Shanba va yakshanba
⏰ 12:00 — 23:00
#humoarena#toshkentkatok#bepulmorojniy#mishkanapolyus#muzlikzavq
🎉 HUMO ARENA поздравляет с Днём защиты детей! 🌈💫
Дети — наше будущее, наша радость и вдохновение. Пусть каждый ребёнок будет окружён любовью, заботой и смехом! 💖
Желаем всем малышам счастливого детства, ярких эмоций и исполнения самых заветных мечт! 🧸🎈
С любовью,
ваша HUMO ARENA 💙
#HumoArena#ДеньЗащитыДетей#1июня#СчастливоеДетство#Семья#ПраздникДляВсех
💙💙💙💙💙💙💙💙💙💙💙💙💙💙
🎉 HUMO ARENA barcha bolalarni 1-iyun – Bolalarni himoya qilish kuni bilan tabriklaydi! 🌈💫
Bolalar — bizning kelajagimiz, quvonchimiz va ilhom manbaimiz. Har bir bola mehr, g‘amxo‘rlik va kulguga burkangan baxtli bolalikni boshdan kechirsin! 💖
Barcha kichkintoylarga baxtli bolalik, yorqin his-tuyg‘ular va orzu-umidlarning ro‘yobga chiqishini tilaymiz! 🧸🎈
Muhabbat bilan,
sizning HUMO ARENA 💙
#HumoArena#BolalarniHimoyaQilishKuni#1iyun#BaxtliBolalik#Oila#Bayram