Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
#Bursa
🇺🇿Manzil — Bursa: Ilm va ma’rifat sari muhim qadam!
✨ Bugun jamoamiz Turkiya Respublikasining tarixiy va go‘zal shahri — Bursa tomon yo‘l oldi. Ushbu tashrifning asosiy maqsadi — “O‘zbek xotin-qizlar huquqlarini himoya qilish jamiyati” hamda “Alisher Navoiy nomidagi O‘zbek tili va madaniyat markazi” hamkorligida tashkil etilayotgan ilmiy-amaliy dasturda ishtirok etishdir.
⚡️ Shu bilan birga, tashrif doirasida Bursada istiqomat qilayotgan vatandosh ayollarimiz bilan yaqindan tanishish, ularning muammolarini o‘rganish, ijtimoiy qo‘llab-quvvatlash masalalarini muhokama qilish hamda faol vatandoshlarimizni e’tirof etish va rag‘batlantirish ko‘zda tutilgan.
✅ Mazkur tashrif ilmiy-amaliy tajriba almashish, milliy qadriyatlarimizni targ‘ib etish va Bursadagi vatandoshlar bilan aloqalarini yanada mustahkamlash yo‘lida muhim ahamiyat kasb etadi.
🔎Bizni kuzatishda davom eting! Bundan-da katta yangiliklar hali oldinda!
🌐Rasmiy sahifalarimizga obuna bo‘ling!
#Bursa
#milliyqadriyat
📸Tadbirdan fotolavhalar
✨ Bursa TÜDAM qoshidagi Alisher Navoiy nomli O‘zbek tili va madaniyat markazida o‘tgan unutilmas lahzalar muhrlangan suratlar. Ilm, madaniyat va milliy g‘urur birlashgan kun!
✈️Bizni kuzatishda davom eting!
🌐Rasmiy sahifalarimizga obuna bo‘ling!
#Bursa
#milliyqadriyat
🇺🇿Ilm, Ma’rifat va Milliy G‘urur Tantanasi!
Bugun Jamiyatimiz tomonidan Bursa TÜDAM qoshidagi Alisher Navoiy nomli O‘zbek tili va madaniyat markazida ilm-fan, hamjihatlik va milliy qadriyatlarimizni o‘zida mujassam etgan ilmiy-amaliy tadbir o’tkazildi. Tadbir shunchaki uchrashuv emas, balki o‘zbek ruhini Turkiyada yashnatgan haqiqiy ma’naviyat bayramiga aylandi.
✨ Tadbirda xalqaro doira va mahalliy hokimiyat vakillari jam bo‘ldilar. Xususan, DATÜB (Dünya Ahıskalı Türkler Birliği)rahbariyati, Gürsu shahar hokimiyati kengashi a’zolari, AK Parti Bursa viloyati ayollar qanoti vakillari, Bursa Uludağ universiteti va Bursa Texnika universiteti professor-o‘qituvchilari hamda talabalari, Qo'qon universiteti professor-o’qituvchilari va vatandosh xotin-qizlarimiz qatnashdilar.
⚡️ Ikki qardosh davlat — O‘zbekiston va Turkiya madhiyalari sadosi ostida boshlangan tadbir xalqlarimiz o‘rtasidagi buzilmas do‘stlik rishtalarini yana bir bor namoyon etdi.
🌸 Tadbirning eng hayajonli qismi taqdirlash marosimi bo‘ldi. Jamiyat rivojiga hissa qo‘shayotgan faol o‘zbek ayollari hamda o‘zbek-turk do‘stligiga kamarbasta bo‘layotgan mahalliy hokimiyat vakillariga maxsus Tashakkurnoma va milliy esdalik sovg‘alari topshirilib, ularning fidokorona mehnatlari munosib e’tirof etildi.
💧 Eng ta’sirli lahzalar O‘zbekistonda tug‘ilib o‘sgan Ahiska turklari bilan kechgan muloqotda kuzatildi. Ular kindik qoni to‘kilgan tuproq sog‘inchi va bolalik xotiralarini so‘zlar ekanlar, hayajonli ko‘z yoshlari bilan barchaning qalbini junbushga keltirdilar.
🎓 Bursadagi nufuzli universitetlarda tahsil olayotgan izlanuvchan talabalarimiz bilan kechgan muloqot tadbirga o‘zgacha energiya bag‘ishladi. Yoshlarimizning vatan ravnaqi yo‘lidagi g‘ayrati va kreativ g‘oyalari muhokama qilinib, bu uchrashuv xorijdagi yoshlarni birlashtirish yo‘lidagi muhim qadam bo‘ldi.
🍲 Mehmondo‘stlik an’analarimizga muvofiq, barcha ishtirokchilarga, xususan talabalarga o‘zbek oshxonasi gultoji — palov tortiq etildi. Vatan mehri bilan tayyorlangan bu taom davradagi samimiylikni yanada oshirdi.
🎶 Tadbirning badiiy qismi milliy o‘tovdagi sehrli muhitda davom etdi: yangragan she’rlar, taronalar va samimiy gurunglar har bir yurtdoshimizni vatan sog‘inchi va g‘ururi atrofida birlashtirdi. Bu uchrashuv uzoqdagi yaqinlarimizni umumiy maqsad yo‘lida bog‘lovchi ma’naviy ko‘prikka aylandi.
✨Maqsadimiz bitta: Milliy qadriyatlarimizni asrash, ilm-fanni ulug‘lash va xorijdagi yurtdoshlarimiz o‘rtasida hamjihatlikni mustahkamlash!
🌸 Ushbu uchrashuvni tashkil etishda yaqindan ko‘maklashgan TÜDAM hamda Alisher Navoiy nomli O‘zbek tili va madaniyat markazi rahbariyatiga, “O‘zbek xotin-qizlar huquqlarini himoya qilish jamiyati”ning Bursadagi yangi tayinlangan vakili Surayyo Xodjayeva va barcha ishtirokchilarga cheksiz minnatdorchilik bildiramiz.
🤝Birligimiz va ma’naviy hamjihatligimiz bardavom bo‘lsin!
🔎Bizni kuzatishda davom eting!
🌐Rasmiy sahifalarimizga obuna bo‘ling!
#iftorlik
#bursa
#17Mart
📹 Bursa shahridagi iftorlik tadbiridan video lavha.
✔️Bizni kuzatishda davom eting! Bundan-da katta yangiliklar hali oldinda!
🌐Rasmiy sahifalarimizga obuna bo'ling!
#iftorlik
#bursa
#17Mart
⚡️Kecha Jamiyatimiz rahbari Ozoda İslomova boshchiligidagi jamoamiz Bursa shahrida yashab turgan O’zbekistonlik vatandoshlarimizning taklifiga binoan tashkil etilgan iftorlik tadbirida ishtirok etdi.
✨Tadbir davomida iftorlik dasturxonining atrofida Bursadagi vatandoshlarimiz bilan samimiy va mazmunli suhbatlar o’tkazildi.
🤝Ushbu tadbir, Vatandoshlarimizni birlashtirgan va ular o’rtasida iliq aloqalarni mustahkamlashga xizmat qilgan muhim bir uchrashuv bo’ldi.
✔️Bizni kuzatishda davom eting! Bundan-da katta yangiliklar hali oldinda!
🌐Rasmiy sahifalarimizga obuna bo'ling!