Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
#HAYIT MUBORAK BO'LSIN
Aziz yurtdoshlar, Fanlar akademiyasi akademiklari, olimlari, jonkuyar va fidoyi xodimlari! Sizlarni qutlug' Ramazon hayiti bilan samimiy tabriklaymiz.
Jamiyatimiz farovonligi va ilm-fan rivoji yo'lidagi sharafli faoliyatingizda ulkan zafarlar tilaymiz.
Tilagimiz osmonimiz hamisha musaffo, yurtimiz tinch-farovon, dasturxonlarimiz to'kin bo'lsin! Barchangizga uzoq umr, sihat-salomatlik tilab qolamiz!
Hayit ayyomingiz muborak bo'lsin!
O'ZBEKISTON RESPUBLIKASI FANLAR AKADEMIYASI
Bizni kuzatib boring👇
😎Telegram |🌐Websayt
😎Facebook |😎YouTube|😎Instagram
🌛🌛🌛 С наступающим праздником Рамазан Хаит
Как и в венчурной индустрии, сильные результаты начинаются с веры в долгосрочную стратегию, дисциплины и правильных партнерств.
Сегодня мы благодарим каждого, кто вместе с нами строит будущее.
Пусть этот день принесет гармонию в ваши команды и вдохновение для новых свершений. Развиваемся и создаем вместе.
Светлого праздника вам и вашим близким
— UzVC Team
————
🌛🌛🌛 Ramazon Hayiti muborak bo‘lsin
Venchur sanoatida bo‘lgani kabi, kuchli natijalar uzoq muddatli strategiyaga bo‘lgan ishonch, intizom va to‘g‘ri hamkorliklardan boshlanadi.
Bugun biz bilan birga kelajakni barpo etayotgan har bir insonga minnatdorchilik bildiramiz.
Ushbu kun jamoalaringizga uyg‘unlik va yangi yutuqlar uchun ilhom olib kelsin. Birgalikda rivojlanamiz va yaratamiz.
Sizga va yaqinlaringizga muborak bayram tilaymiz
— UzVC Team
————
🌛🌛🌛 Eid Mubarak, Happy Ramadan Hayit
Just like in the venture industry, strong results begin with belief in the long game, discipline and the right partnerships.
Today, we are grateful to everyone who is building the future alongside us.
May this day bring harmony to your teams and inspiration for new achievements. Let's grow and create together.
Wishing you and your loved ones a bright and joyful holiday
— UzVC Team
🌐Website |📷Instagram |🌐LinkedIn
#Hayit#Ramadan
#ITC
#Hayit#muborak
"Taqobbalallohu minna va minka"
(Alloh bizdan va sizdan qabul qilsin).
Imom Ahmad rivoyati
🌙 O'zbekiston tumanidagi Raqamli texnologiyalar o'quv markazi barcha dindoshlarimizni Ramazon Hayiti bilan qutlaydi!
🤲 Chin yurakdan dunyodagi eng ezgu tilaklarni bildiramiz. Yaratgan barchamizni afv etsin. Keyingi Ramazonlarga nasib etsin, omin.
@ITCenter_Yaypan
💥Aziz do'stlar, barchangizni Arafa kuni bilan samimiy muborakbod etamiz.
✨ Sizga uzoq umr, mustahkam sog'lik, dasturxoningizga to'kin sochinlik, xonadoningizga esa fayz-baraka tilaymiz. Bayram kunlari quvonchli, baxtli va yoqimli onlarga to'la bo'lsin.
__________________________
💥Дорогие друзья, поздравляем Вас с днем Арафа.
✨ Желаем Вам крепкого здоровья, долголетия, достатка и благополучия. Пусть праздничные дни будут полны приятными моментами радости и счастья.
#Arafa#Hayit#eid#bayram#Artel
Qadrli do‘stlar! Sizlarni Ramazon Hayiti bayrami bilan tabriklaymiz! Siz va yaqinlaringizga sixat-salomatlik, quvonch va oilaviy hotirjamlik tilaymiz! Qalbingiz har kuni quvonch, iliqlik va mehrga to‘lsin!
_______________________
Дорогие друзья! Поздравляем Вас со светлым праздником Рамазан Хайит! Пусть Вы и Ваши близкие пребывают в добром здравии, мире и радости! Желаем Вам процветания, постоянного развития и семейного благополучия. Пусть ваши сердца наполняются радостью, теплом и добротой каждый день!
CNC Uzbekistan.
#eidmubarak#ramazon#hayit#cncelectric#cnc#cncuzbekistan#cnctashkent
Hurmatli do'stlar!
🤩Ramazon hayiti muborak bo'lsin! Bu muborak kunlar sizga tinchlik, baxt va quvonch olib kelsin. Yaqinlaringiz bilan birga o‘tkazadigan har bir daqiqangiz qadrli bo‘lsin. Hayit bayrami – bu nafaqat o‘zaro mehr-muhabbatni oshirish, balki bir-birimizga yordam berish va qo‘llab-quvvatlash davridir.
KUTILGAN FURSAT jamoasi sizni bayram bilan tabriklaydi va sizning har bir orzularingiz amalga oshishini tilaydi. Biz siz bilan birga, yangi imkoniyatlar va muvaffaqiyatlarga erishishda davom etamiz.
Bayramingiz muborak bo‘lsin!
#bayram#ayyom#ramazon#hayit#muborak
📱 YouTube | 📱 Instagram | 📱 Facebook
Ohangaron shahrida bayram shukuhi hukm surmoqda
🌙 Ramazon oyida arzonlashtirilgan yarmarka doimiy faoliyat yuritib, Hayit bayrami arafasida ham narxlar barqaror ta’minlanmoqda.
🇺🇿 Xalq deputatlari Ohangaron shahar Kengashi kotibiyati mudiri Oybek Abdullayev tomonidan shahar Dehqon bozorida muborak Hayit ayyomi hamda Navro‘z bayrami munosabati bilan tashkil etilgan arzonlashtirilgan yarmarka faoliyati o‘rganildi.
✔️ Aholiga qulaylik yaratish, narx-navoning barqarorligini ta’minlash hamda bayram kayfiyatini yuksaltirish maqsadida tashkil etilgan ushbu yarmarka samarali xizmat qilmoqda.
#Ohangaron#Yarmarka#Navro‘z #Hayit#Deputatlar#BayramShukuhi
🇺🇿Ohangaron shahar hokimligi
Axborot xizmati
Telegram|Instagram|Youtube|Websayt|Facebook