Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
#MeningPrezidentim
“Ko‘ksaroy” qarorgohida Prezident Shavkat Mirziyoyevning yoshlar bilan muloqoti boshlandi. Qoraqalpog‘iston, viloyatlar va Toshkent shahridagi studiyalardan uchrashuvda 60 mingdan ziyod yoshlar vakillari ishtirok etmoqda.
Davlatimiz rahbari yig‘ilganlarni samimiy qutladi.
“Yurtimizdagi 22 milliondan ziyod yoshlarimiz timsolida biz juda katta iqtisodiy, ijtimoiy va siyosiy kuchni
ko‘ramiz
”,
– dedi Prezidentimiz.
Har bir vazir, hokim, oliygoh rektori, texnikum, maktab direktori va boshqa mas’ullar hududidagi yoshlarni til va kasb-hunar o‘rganishi, sport bilan shug‘ullanishi, g‘oya, loyiha va startapiga ko‘mak berib, ularni o‘stirishi, ishli va daromadli qilib, birorta yoshni e’tiborsiz qoldirmaslikka yanada katta mas’uliyat bilan yondashib ishlashi lozimligi qayd etildi.
⚡️Sanepidqo'mita Axborot xizmati
📱Telegram|📱Instagram|📱Facebook|📱YouTube|📱Veb-sayt | 🌐Emlash veb-sayt
#MeningPrezidentim
Yoshlar uchun 7 yilgacha imtiyozli kreditlar
✔️Joriy yildan “Kelajak tadbirkori” dasturi boshlanib, yoshlarga 7 yilgacha 15 foizli kreditlar ajratiladi.
💰 Kreditlar: o‘zini o‘zi band qilganlarga 20 mln so‘mgacha (garovsiz), yangi boshlovchilarga 300 mln so‘mgacha, faoliyatini kengaytirayotganlarga 2 mlrd so‘mgacha, kamida 5 nafar bitiruvchini ishga olganlarga 10 mlrd so‘mgacha beriladi.
✔️Shuningdek, “Mening birinchi kasbim” dasturi doirasida bitiruvchilar stajirovka asosida tanlab olinib, ularga oyiga 2 mln so‘mgacha stipendiya to‘lanadi.
✔️Yoshlarning 30 foizi biznes ko‘nikmasi yetishmagani sababli qiynalayotgani bois, hududlarda “Yoshlar biznes inkubatori”lar tashkil etilib, ularda o‘qitish va kompleks xizmatlar yo‘lga qo‘yiladi.
📍Markazlar avval Qoraqalpog‘iston, Jizzax, Namangan, Surxondaryo, Xorazm hamda Toshkentda, keyinchalik barcha hududlarda yo‘lga qo‘yiladi.
Sayt | Telegram| Facebook | Instagram| Youtube| X
#MeningPrezidentim
✔️Yaratilgan keng imkoniyatlar natijasida yangilikka intiluvchan yoshlarimiz yaratgan 63 ta startap loyihasiAQSh, Janubiy Koreya, Buyuk Britaniya va Birlashgan Arab Amirliklari kabi davlatlar bozoriga kirib bordi.
✔️Bugun yosh tadbirkorlar yurtimizdagi biznes vakillarining 35 foizini tashkil etmoqda.
“Albatta, yangi metodika va innovatsiya olib kirib, ta’lim sifatini oshirish va bolalarni kasbining ustasi qilish haqida izlanadigan rahbarning faoliyatida o‘zgarish bo‘ladi, ishiga yangicha muhit kiradi”,
– dedi davlatimiz rahbari.
✔️Dunyoda kun sayin yoshlar ongini egallash bo‘yicha yangi tahdidlar yuzaga kelayotgan sharoitda barcha darajadagi rahbarlar yoshlar bilan ishlash bo‘yicha yangi ish tizimiga o‘tishi zarurligi qayd etildi.
Sayt | Telegram| Facebook | Instagram| Youtube| X
#MeningPrezidentim
Yoshlar uchun 7 yilgacha imtiyozli kreditlar
✔️Joriy yildan “Kelajak tadbirkori” dasturi boshlanib, yoshlarga 7 yilgacha 15 foizli kreditlar ajratiladi.
💰 Kreditlar: o‘zini o‘zi band qilganlarga 20 mln so‘mgacha (garovsiz), yangi boshlovchilarga 300 mln so‘mgacha, faoliyatini kengaytirayotganlarga 2 mlrd so‘mgacha, kamida 5 nafar bitiruvchini ishga olganlarga 10 mlrd so‘mgacha beriladi.
✔️Shuningdek, “Mening birinchi kasbim” dasturi doirasida bitiruvchilar stajirovka asosida tanlab olinib, ularga oyiga 2 mln so‘mgacha stipendiya to‘lanadi.
✔️Yoshlarning 30 foizi biznes ko‘nikmasi yetishmagani sababli qiynalayotgani bois, hududlarda “Yoshlar biznes inkubatori”lar tashkil etilib, ularda o‘qitish va kompleks xizmatlar yo‘lga qo‘yiladi.
📍Markazlar avval Qoraqalpog‘iston, Jizzax, Namangan, Surxondaryo, Xorazm hamda Toshkentda, keyinchalik barcha hududlarda yo‘lga qo‘yiladi.
Sayt | Telegram| Facebook | Instagram| Youtube| X
#MeningPrezidentim
✔️Yaratilgan keng imkoniyatlar natijasida yangilikka intiluvchan yoshlarimiz yaratgan 63 ta startap loyihasiAQSh, Janubiy Koreya, Buyuk Britaniya va Birlashgan Arab Amirliklari kabi davlatlar bozoriga kirib bordi.
✔️Bugun yosh tadbirkorlar yurtimizdagi biznes vakillarining 35 foizini tashkil etmoqda.
“Albatta, yangi metodika va innovatsiya olib kirib, ta’lim sifatini oshirish va bolalarni kasbining ustasi qilish haqida izlanadigan rahbarning faoliyatida o‘zgarish bo‘ladi, ishiga yangicha muhit kiradi”,
– dedi davlatimiz rahbari.
✔️Dunyoda kun sayin yoshlar ongini egallash bo‘yicha yangi tahdidlar yuzaga kelayotgan sharoitda barcha darajadagi rahbarlar yoshlar bilan ishlash bo‘yicha yangi ish tizimiga o‘tishi zarurligi qayd etildi.
Sayt | Telegram| Facebook | Instagram| Youtube| X
Hurmatli Janob Prezident!
Tavallud ayyomingiz bilan chin qalbimdan tabriklayman!
Yurtimiz, xalqimiz va biz-yoshlar baxtiga Sizga mustahkam sog'lik, uzoq, mazmunli, barakali va quvonchga to’la umr tilayman.
Siz O'zbekiston yoshlarini jasoratli g'alabalar, tarixiy natijalar va ulkan ishlarga ruhlantirasiz.
Barcha boshlagan ishlaringizda Yaratgan Sizga madadkor bo’lsin!
#meningPrezidentim
Xalq bor - Otang bor
Quyoshday mehribon
Vataning-onang,
Zaminday vazminu
Mehnatkash, mushfiq
Istagan narsangni tayyorlaguvchi
Xalq bor - Otang bor.
👁 YouTube orqali ko‘rish
#MeningPrezidentim
Telegram sahifamiz👉@yoshlaragentligi
Yangi O‘zbekiston bunyodkori — mamlakat 8 yilda
Bugun O‘zbekiston Respublikasi Prezidenti Shavkat Mirziyoyev 68 yoshni qarshiladi.
Tug‘ilgan kuningiz muborak, muhtaram Prezident!
#MeningPrezidentim
Telegram | Х
Facebook | Instagram
Mamlakatimizda har haftaning payshanba kuni vazirlik, idora va hokimliklarda “Yoshlar kuni” bo‘lishi belgilandi.
Shu kuni sohaga mas’ul rahbarlar mahalla, maktab va texnikumlarga borib, yoshlarni eshitadi va muammosini hal qiladi.
Hokimlar yoshlarbop savdo-servis loyihalarini qiladi, yoshlarning ta’lim olishi, sport bilan shug‘ullanishi, kasb va til o‘rganib, ishga kirishi yoki tadbirkorlik bilan shug‘ullanishiga ko‘maklashadi, startapchilar bilan uchrashuvlar o‘tkazib, alohida mablag‘ va grantlar ajratadi.
Eng yaxshi tomorqachi, fermer, sanoatchi, startapchi, ijodkor, ma’naviyat va boshqa sohalardagi yoshlar uchun qiziqarli mavzularda tanlovlar va yarmarkalar o‘tkaziladi.
#MeningPrezidentim#YoshlarPrezidenti
“Ko‘ksaroy” qarorgohida Prezident Shavkat Mirziyoyevning yoshlar bilan muloqoti boshlandi. Qoraqalpog‘iston, viloyatlar va Toshkent shahridagi studiyalardan uchrashuvda 60 mingdan ziyod yoshlar vakillari ishtirok etmoqda.
Davlatimiz rahbari yig‘ilganlarni samimiy qutladi.
“Yurtimizdagi 22 milliondan ziyod yoshlarimiz timsolida biz juda katta iqtisodiy, ijtimoiy va siyosiy kuchni ko‘ramiz”,
– dedi Prezidentimiz.
Har bir vazir, hokim, oliygoh rektori, texnikum, maktab direktori va boshqa mas’ullar hududidagi yoshlarni til va kasb-hunar o‘rganishi, sport bilan shug‘ullanishi, g‘oya, loyiha va startapiga ko‘mak berib, ularni o‘stirishi, ishli va daromadli qilib, birorta yoshni e’tiborsiz qoldirmaslikka yanada katta mas’uliyat bilan yondashib ishlashi lozimligi qayd etildi.
#MeningPrezidentim#YoshlarPrezidenti
⚡️Bugun yoshlar uchun yana bir tarixiy kun bo‘ladi
🇺🇿 Birozdan so‘ng Ko‘ksaroy qarorgohida Prezident Shavkat Mirziyoyevning yoshlar bilan ularning tashabbuslarini qo‘llab-quvvatlash bo‘yicha qo‘shimcha imkoniyatlarga bag‘ishlangan muloqoti boshlanadi.
#MeningPrezidentim#YoshlarPrezidenti
Faсebook|
✅Instagram
✅Youtube |
✅Murojaat yo'llas
#MeningPrezidentim#YoshlarPrezidenti
Juda katta iqtisodiy, ijtimoiy va siyosiy kuch bo‘lgan yoshlarimiz uchun yangi imkoniyat eshiklari ochib berilgan kun
—
День, когда перед нашей молодежью, являющейся экономической, социальной и политической силой, распахнулись новые двери возможностей.
Bizni kuzating
Facebook | Instagram |YouTube|Telegram