Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
🎮Qlever reklama va ijtimoiy mas'uliyat uchun imkoniyatlar ochadi!
Qlever.Asia - bu Markaziy Osiyoda 200 000 dan ortiq foydalanuvchilar va O'zbekistonda 40 000 dan ortiq ro'yxatdan o'tgan o'yinchilar auditoriyasiga ega innovatsion ta'limiy platforma. Endilikda brendlarda nafaqat reklama joylashtirish, balki tanqidiy tafakkur va mediasavodxonlikni qo'llash orqali ijtimoiy mas'uliyatni namoyon qilish imkoniyati mavjud.
🐕Reklama formatlari:
✅Platformada reklama materiallarini joylash (yangiliklar, PR-maqolalar)
✅Sovg'alarga homiylik qilish (brend mahaulotlar, vaucherlar, gadjetlar)
✅Ijtimoiy tarmoqlarga integratsiya (postlar, reelslar)
🤝 Ijtimoiy loyihani qo'llab-quvvatlang!
Qlever bilan hamkorlik — bu nafaqat marketing foydasi, balki biznesingizning ijtimoiy yo'nalganligini ta'kidlash imkoniyati. Siz mintaqada ta'lim va tanqidiy tafakkurga hissa qo'shib, loyiha rivojini qo'llashingiz mumkin.
📥 Hamkorlik va qo'llab-quvvatlash masalalari bo'yicha TG (@DaryaNicolayevna) yoki [email protected] pochta orqali murojaat qiling!
🔺🔺🔺
🎮Qlever открывает возможности для рекламы и социальной ответственности!
Qlever.Asia — это инновационная образовательная платформа с аудиторией более 200 000 пользователей в Центральной Азии и около 40 000 зарегистрированных игроков в Узбекистане. Теперь у брендов есть возможность не только разместить рекламу, но и продемонстрировать социальную ответственность, поддержав развитие критического мышления и медиаграмотности.
🐕 Форматы рекламы:
✅ Размещение рекламных материалов на платформе (новости, PR-статьи)
✅ Спонсирование призов (брендированные товары, ваучеры, гаджеты)
✅ Интеграции в социальные сети (посты, рилсы)
🤝Поддержите социальный образовательный проект!
Партнерство с Qlever — это не только маркетинговая выгода, но и возможность подчеркнуть социальную ориентированность вашего бизнеса. Вы также можете сделать пожертвование на развитие проекта, внеся вклад в образование и критическое мышление в регионе.
📥 По вопросам сотрудничества и поддержки пишите в TG (@DaryaNicolayevna) или на почту [email protected]!
#Реклама#Партнерство#СоциальнаяОтветственность#Qlever#Reklama#Hamkorlik#IjtimoiyMasuliyat
Tadaaam! #Qleverqahramoni tanlovimiz g'oliblarini tabriklaymiz 🥳
Bizning jamoamiz eng noodatiy va ijodiy selfilarni tanladi📸
Eslatib o'tamiz, uchta eng yaxshi selfi mualliflari har biriga 150-dan yulduzchaga ega berishgan💫
1️⃣@katya_13091987__winwinwin - KatyaKuznetsova
2️⃣@d4uranbek - D4uranbek
3️⃣@jddesignerpro - JDDesigner
Qolgan barcha ishtirokchilarning har biriga 20-ta yulduzchadan taqdim etildi.
Faollik va ishtirokingiz uchun barchangizga katta rahmat. Bizning sahifamizdagi yangiliklar va tadbirlarni kuzatib boring😊
#qlever#qleverasia#qleveruz#mjdcuz
--------------
Тадааам! Поздравляем победителей нашего конкурса #геройqlever🥳
Наша команда выбрала самые необычные и творческие селфи📸
Напоминаем, что авторы трёх лучших селфи получили по 150 звёздочек💫
1️⃣@katya_13091987__winwinwin - KatyaKuznetsova
2️⃣@d4uranbek - D4uranbek
3️⃣@jddesignerpro - JDDesigner
Все остальные участники получили по 20 звёздочек⭐️
Спасибо большое всем за вашу активность и участие. Следите за обновлениями и активностями на нашей странице😊
#qlever#qleverasia#qleveruz#mjdcuz
@qleveruz
🎮Qlever reklama va ijtimoiy mas'uliyat uchun imkoniyatlar ochadi!
Qlever.Asia - bu Markaziy Osiyoda 200 000 dan ortiq foydalanuvchilar va O'zbekistonda 40 000 dan ortiq ro'yxatdan o'tgan o'yinchilar auditoriyasiga ega innovatsion ta'limiy platforma. Endilikda brendlarda nafaqat reklama joylashtirish, balki tanqidiy tafakkur va mediasavodxonlikni qo'llash orqali ijtimoiy mas'uliyatni namoyon qilish imkoniyati mavjud.
🐕Reklama formatlari:
✅Platformada reklama materiallarini joylash (yangiliklar, PR-maqolalar)
✅Sovg'alarga homiylik qilish (brend mahaulotlar, vaucherlar, gadjetlar)
✅Ijtimoiy tarmoqlarga integratsiya (postlar, reelslar)
🤝 Ijtimoiy loyihani qo'llab-quvvatlang!
Qlever bilan hamkorlik — bu nafaqat marketing foydasi, balki biznesingizning ijtimoiy yo'nalganligini ta'kidlash imkoniyati. Siz mintaqada ta'lim va tanqidiy tafakkurga hissa qo'shib, loyiha rivojini qo'llashingiz mumkin.
📥 Hamkorlik va qo'llab-quvvatlash masalalari bo'yicha TG (@DaryaNicolayevna) yoki [email protected] pochta orqali murojaat qiling!
🔺🔺🔺
🎮Qlever открывает возможности для рекламы и социальной ответственности!
Qlever.Asia — это инновационная образовательная платформа с аудиторией более 200 000 пользователей в Центральной Азии и около 40 000 зарегистрированных игроков в Узбекистане. Теперь у брендов есть возможность не только разместить рекламу, но и продемонстрировать социальную ответственность, поддержав развитие критического мышления и медиаграмотности.
🐕 Форматы рекламы:
✅ Размещение рекламных материалов на платформе (новости, PR-статьи)
✅ Спонсирование призов (брендированные товары, ваучеры, гаджеты)
✅ Интеграции в социальные сети (посты, рилсы)
🤝Поддержите социальный образовательный проект!
Партнерство с Qlever — это не только маркетинговая выгода, но и возможность подчеркнуть социальную ориентированность вашего бизнеса. Вы также можете сделать пожертвование на развитие проекта, внеся вклад в образование и критическое мышление в регионе.
📥 По вопросам сотрудничества и поддержки пишите в TG (@DaryaNicolayevna) или на почту [email protected]!
#Qlever#Реклама#Партнерство#СоциальнаяОтветственность#Qlever#Reklama#Hamkorlik#IjtimoiyMasuliyat
🎮 А у нас на платформе новая игра! Играя в нее вы научитесь проверять изображения, прокачаете критическое мышление, станете более внимательными к деталям.
🔍 В современном мире фейки встречаются на каждом шагу. Новости, статьи, фотографии, видео - все может быть подделкой. Умение распознавать фотофейки - это важный навык, который поможет вам не стать жертвой обмана.
🎓 Играйте и учитесь!
📸🔍📸🔍📸🔍📸🔍
🎮 Bizning platformamizda esa - yangi o'yin! Uni o'ynash orqali siz tasvirlarni tekshirishni, tanqidiy fikrlashni yaxshilashni va tafsilotlarga ko'proq e'tibor berishni o'rganasiz.
🔍 Zamonaviy dunyoda feyklar va soxta narsalar har qadamda topiladi. Yangiliklar, maqolalar, fotosuratlar, videolar - hammasi feyk bo'lishi mumkin. Feyk fotosuratlarni fosh etish qobiliyati sizni aldov qurboni bo'lmaslikka yordam beradigan muhim ko'nikmadir.
🎓 O'ynang va bilim toping!
#qlever#oyin#fakes#tanqidiyfikrlash#photofake#qlever#игра#фейки#критическоемышление#фотофейк
🎮Qlever
📹Instagram
💬Telegram