Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
#ankalife
Oson bo’ladi demaymiz, lekn “arziydi” deya olamiz!😊
Farzandsizlik hayotingizni qorong’ulashtirishiga yo’l qo’ymang!
📞+998(55)2014000
+998(99)2225854
📍 Manzil: Andijon shahar, Ahmad Donish koʻchasi 4-uy.
▪️Moʻljal: “MedSanchast” shifoxo
🔝 PROFESSOR CİHANGİR ÇAKICI KIM? #YAQINDAN_TANISHAMIZ:
🔝 Prof. CİHANGİR ÇAKICI - 🇹🇷 Turkiye bepushtlik fondi Prezidenti xisoblanadi
🪄 Prof. CİHANGİR ÇAKICI - bepushtlik va EKO (IVF) bo'yicha 28 yillik tajribaga ega.
🇹🇷 Prof. CİHANGİR ÇAKICI - Ankarada #ANKALIFE nomli EKU markaziga asos solgan
🇺🇿🇰🇬 Prof. CİHANGİR ÇAKICI - O'zbekistonning Toshkent va Andijon shaxarlarida, hamda Qirg'izistonning Bishkek va Osh shaxarlarida umumiy xisobda 4 ta Ankalife EKU markazlariga asos solgan va xozirgacha sernatija faoliyat yuritib keladi
📊 Prof. CİHANGİR ÇAKICI - Xalqaro EKU konferensiyalari va kongresslarida o'z ilmiy yutuqlari va maqolalari bilan muntazam spiker sifatida ishtirok etib keladi
📚 Prof. CİHANGİR ÇAKICI - Ankalife EKO Akademiyasi asoschisi, va muntazam ravishda reproduktolog va EKU mutaxassislarini o'qitib keladi.
🔖 Prof. CİHANGİR ÇAKICI qabullari Andijon shaxrida 22-23-24-mart sanasida bo’lib o’tadi.
☝🏻 * Eslatma: Ramazon munosabati bilan Ankalife Andijon EKO markazida Professor tibbiy ko’riklari BEPUL!
☎️ Batafsil ma'lumot uchun:
Andijon Ankalife
+998 55 201 40 00
raqamiga qo'ng'iroq qiling.
🏥Ankalife Andijon EKU markazimizda homiladorlik❗️
12-yildan so’ng erishilgan homilardorlik, 2chi emberion transferidan (embrionni ayol organizmiga ko’chirib o’tkazish) son’g!
Yanvar oyida embrion transfer qilingan edi, lekin afsuski ijobiy natija bo’lmadi, lekin embrionlari borligi sababli 2 oydan so’ng yana 2 ta embrionlari transfer qilindi va homiladorlik kuzatildi.
🤲Ohirigacha mahkamidan bergan bo’lsin, eson-omon bag’rlariga bosib olishlarini tilab qolamiz.
❕Bizning klikamizda bu juftlikgimizni muzlab turgan 2ta embrionchalari ham o’z vaqt-soatlari kutib uxlashmoqda☺️
ℹ️Tibbiy ko’riklar BEPUL
Farzansizlik hayotingizni qorong’ulashtirishga yo’l qo’ymang!
📞Call center: 55 201 40 00
🏥Manzil: Andijon shahar, Ahmad Donish koʻchasi 4-uy.
▪️Moʻljal: “MedSanchast” shifoxonasi.
Telegram | Instagram | Youtube
#natija#andijonEKOmarkaz#Ankalife
Biz bilamiz — bu yo‘l oson emas.
Biz bilamiz, siz bu yo‘lni og‘riq, qo‘rquv va umid bilan boshlaysiz.
Lekin natijani ko‘rganingizda — Barcha sinovlar orqada qolganini his qilasiz, ko‘zingizda esa chin baxt porlaydi 💚
Shu on uchun… bu yo‘l haqiqatdan ham arziydi ✨
🏥Ankalife Turk EKO klinikasi — orzular ro‘yobga chiqadigan joy.
#EKO#Ankalife#onaBolishBaxti#mojizayolusida#arziydi
😎Telegram😎Instagram😎Youtube
“ANKALIFE” EKU (EKO) markazi Andijonda!
"Ankalife" EKU markazida O’rta Osiyoda mashxur ginekolog, tibbiyot fanlari doktori, dotsent JIHANGIR JAKIJI faoliyatini boshlaydi
"ANKALIFE" EKU MARKAZI: 1997 yilda Turkiyaning Ankara shahrida ginekolog, tibbiyot fanlari doktori, dotsent JIHANGIR JAKIJI tomonidan asos solingan, 2015 yilda Bishkek shahrida va 2019 yilda Toshkent shahrida o’z tarmoqlarini ochgan...
Murojaat uchun:
☎️ +998552014000
📍Manzil: Andijon shahri, Ahmad Donish ko’chasi (mo’ljal: 5-poliklinika yonida).
#ankalife#EKU#EKO#suniyuruglantirish#ginekolog#androlog#bepushtlik
Har bir ayol onalik baxtiga loyiq.
Ba’zida bu yo‘l biroz uzoqroq va sabr talab qiladi…
Lekin ishonch bilan aytamiz:
Sizni albatta tanlashadi. Siz onaga aylanasiz.
To‘g‘ri vaqtda.
To‘g‘ri joyda.
Va Allohning irodasi bilan.
ANKALIFE klinikasi — siz bilan birga.
Orzuingizga yetish yo‘lida qo‘llab-quvvatlaymiz.
🏥Ankalife Turk EKO klinikasi Andijon filiali!
To’liq ma’lumot va qabulga yozilish uchun:
📞 +998 552014000 Call centr
+998 992225854
⠀📍Manzil: Andijon shahar, Ahmad Donish koʻchasi, 4-uy.
Moʻljal: “MedSanchast” shifoxonasi
⸻
#onalik#farzandorlik#ankalife#andijon#eko#tibbiyot#baxtliayollar#umid#shifo
🚀Telegram | 📷Instagram|🎬 Youtube | 🌐Ankalifeandijan.com