Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
#sana
Buyuk sarkarda xotirasiga ehtirom ko‘rsatildi
Toshkent viloyati hokimi Zoyir Mirzayev buyuk sarkarda, davlat va jamoat arbobi Amir Temur tavalludining 690 yilligi munosabati bilan poytaxt markazida joylashgan sohibqiron haykali poyiga gul qo‘ydi.
Gul qo‘yish marosimida tuman va shahar hokimlari, nuroniylar hamda keng jamoatchilik vakillari ishtirok etdi.
Tadbir davomida sohibqironning boy tarixiy merosi, uning davlatchilikni mustahkamlash, yurt obodligi va adolatli jamiyat barpo etish yo‘lidagi ulkan xizmatlari alohida e’tirof etildi.
Shuningdek, ishtirokchilar tomonidan Amir Temur shaxsiyatiga yuksak ehtirom izhor qilinib, uning ibratli hayot yo‘li va jasorati yosh avlod uchun doimo o‘rnak bo‘lib qolishi ta’kidlandi.
✅Telegram
🌐Website
📹YouTube
✅Facebook
🕊Twitter
🌐Instagram
#Sana30-yanvar — Islom Karimov tavallud topgan kun
Oʻzbekistonning mustaqil davlat sifatida shakllanishi, davlatchilik asoslarining barpo etilishida Birinchi Prezident Islom Karimovning xizmatlari beqiyos.
Davlat rahbari Shavkat Mirziyoyev tashabbusi va eʼtibori bilan Birinchi Prezidentning xotirasi abadiylashtirildi, Samarqandda uning maqbarasi barpo etildi. 30-yanvar sanasini nishonlash anʼanaga aylandi.
👍Islom Karimov siymosi bir qancha rassomlar asarlarida aks atgan.
😎Telegram😎Instagram
😎Facebook 😎Youtube
#Sana18-noyabr —O'ZBEKISTON DAVLAT BAYROG'I qabul qilingan kun!
Bu kun nafaqat taqvimdagi bir sana, balki milliy o‘zlik va mustaqilligimizni eslatuvchi tarixiy chorlovdir. Bayroq tinch, farovon va o‘z kelajagini o‘zi qurishga bel bog‘lagan xalqning yagona maqsad yo‘lidagi birdamlik ramzidir.
🇺🇿Bugun 34 yoshini nishonlayotgan bayrog‘imiz doimo hilpirab turaversin!
😎Telegram😎Instagram
😎Facebook 😎Youtube
#SanaO'qituvchi va murabbiylar kuni
"Jahonda bo‘lmasa muallim agar, Hayot ham bo‘lmasdi go‘zal bu qadar". Abdurahmon Jomiy
😎Telegram😎Instagram
😎Facebook 😎Youtube
#SanaXalqaro xattotlik kuni
Islom olamida arab xatining quyidagi 7 turi keng qo‘llanadi:
🗣MUHAQQAQ. Bu xatning ko‘proq qismi tekis, tikka chiziqli harflar uzun yoziladi. O‘ramlarning uchi ingichka bo‘lib tugaydi, qolgan bo‘laklari dumaloq shaklda.
🗣RAYHONIY. Ko‘fiydan kelib chiqqan, yozilishi shakl jihatidan rayhonga o‘xshash bo‘lib, aylanma shaklli harflar suls xatiga qaraganda yotiqroq va cho‘ziqroq yoziladi.
🗣SULS. Bir narsaning 3/1 hissasi yoki uchinchi hissasi demakdir. Yozuvda qalamning uchinchi hissasi ishlatiladi.
🗣NASX. Xattotlar tomonidan keng qo‘llanilgan. Lug‘aviy maʼnosi – o‘chirish, bekor qilish demak. Tez va ravon yozilgani, ko‘zga go‘zal va bejirim tashlangani uchun kitoblarda asosiy yozuv vazifasini o‘tagan.
🗣TAVQI'. Xatning yarmi tekis, yarmi yumaloqroq chiziqdan tashkil topgan. Ilgari qozixona hujjatlarining boshiga yoziladigan so‘zlar shu xat bilan bitilgan. Farmon, maktub, qo‘lyozmalarga tavqiʼ uslubida imzo qo‘yilgan.
🗣RIQO'. Bu “ruqʼa” so‘zining ko‘pligi bo‘lib, qog‘oz parchalari, maktublar demakdir. Riqoʼ xatida harflar bir-biriga qurama qilib yoziladi. Ko‘pincha, nomalar shu xat bilan yozilgan.
🗣TA'LIQ. “Osilib turuvchi”, “ilingan” degan maʼnolarni anglatadi. Bu xat aslida riqoʼ bo‘lgan. Rasmiy va shaxsiy xatlar yozishda foydalanilgan.
Yuqoridagi xat turlari xattotlar tilida "Al-Xutut as-sabʼa" (Yetti xat) deb yuritiladi. Xattotman degan har bir inson shu xatlarni bilishi zarur bo‘lgan.
😎Telegram😎Instagram
😎Facebook 😎Youtube
#Sana30 iyul – Xalqlar do‘stligi kuni
👍 Hozirda O‘zbekiston hududida 2 mingga yaqin DUNGANlar yashaydi. Ular 130 yil oldin Xitoydan O‘rta Osiyo mintaqasiga kelib, shu yerda qo‘nim topgan.
👍O‘zbekiston davlat tarixi muzeyida XIX asr oxiri – XX asr boshlari dungan madaniyati va turmush tarziga oid 300 dan ortiq eksponat bor. Ularning aksariyati muzey ilmiy xodimlari, shu jumladan mashhur etnograf Turdi Mirgiyazov tomonidan 1927–1928-yillarda Qozog‘istonning Sho‘rtepa qishlog‘i va Qirg‘izistonning To‘qmoq, Pishpek shaharlari hamda Qora qo‘nguz qishlog‘idan to‘plangan.
😎Telegram😎Instagram
😎Facebook 😎Youtube
#Sana9-iyun — Xalqaro arxivlar kuni
Dudin foto arxivi: O'rta Osiyoning "bozor hayoti"
Rus etnografi va fotografi S.Dudin 1900–1902-yillarda O‘rta Osiyoga xizmat safarida bo'lib, Buxoro, Toshkent, Samarqand, Qo‘qon, Andijon bozorlarini ko'zdan kechiradi. U o‘zining yuzdan ortiq fotosuratlarida “bozor hayoti”ni tasvirlashga harakat qildi.
🇺🇿legacy.uz🇺🇿woscu.org
😎Telegram😎Instagram
😎Facebook 😎Youtube
#Sana
Hujjatlarning dalolat berishicha:
🔴Ikkinchi jahon urushida 6 mln 800 ming nafar aholimizning qariyb2 mln nafari ishtirok etgan. Shundan 540 mingga yaqini halok bo‘lgan, 158 mingi bedarak yo‘qolgan, 50 mingdan ortig‘i konslagerlarda qiynoqlar tufayli halok bo‘lgan, 60 mingdan ziyodi nogiron bo‘lib qaytgan. Urush hududlaridan O'zbekistonga 250 ming nafar yetim bola olib kelingan🔴
⛔HECH KIM va HECH NARSA UNUTILMAYDI!
😎Telegram😎Instagram
😎Facebook 😎Youtube
#Sana
18-aprel — Xalqaro yodgorliklar va tarixiy joylarni asrash kuni
✔️Ushbu sana 1983-yilda YUNESKO qoshida xalqaro madaniy yodgorliklarni saqlash va asrab-avaylash masalalariga e’tiborni jalb qilish uchun Xalqaro yodgorliklar va obidalarni himoya qilish xalqaro kengashi (ICOMOS) tomonidan ta’sis etilgan.
✔️Xalqaro yodgorliklar va tarixiy obidalar kuni birinchi marta 1984-yil 18-aprelda nishonlangan.
Maqsad — insoniyatning madaniy merosini turli shakllarda o‘rganish va mahalliy jamoalarni madaniy merosning ahamiyatini anglashga undash.
👉Obuna bo'ling
#sana
12-aprel — Murod Muhammad Doʻst tug'ilgan kun.
* * *
...Oshno obod maskanda, anvoyi gullar, yashil daraxtlar qurshovida joʻshib nutq soʻzlarkan, bu uning kelishi oldidan tayyorlangan “vaqtinchalik dekoratsiya” ekanini bilmaydi.
Yerdagi yorqin lolalar aslida tuvak gul ekanini, u ketgandan soʻng yigʻib olinishini va yana keyingi manzilga ekilishini, minbar ortida yashnab turgan teraklar esa qayerdandir kesib kelib shunchaki qadab qoʻyilganini sezmaydi, chippa-chin ishonadi.
Shu sababli ham Yaxshiboyev bu qishloqqa suv kerak deganda “Bulduruqning suvi oʻziga yetarli, nahotki yashnab turgan teraklarni koʻrmagan boʻlsangiz!?” deya jahl qiladi...
Murod Muhammad Doʻst, "Lolazor" romani
🌐Sayt
✈️Telegram
✅Murojaat
♾Muhokama
🌐Instagram
#sana
10-aprel – Abdulla Qodiriy (1894 – 1938) tug'ilgan kun.
Dunyoda beshta – fransuz, rus, ingliz, nemis va hind romanchiligi maktablari bor edi. Endi oltinchisini, ya’ni o‘zbek romanchiligi maktabini Abdulla Qodiriy yaratib berdi.
Yevgeniy Bertels,
akademik
✅"Siyosiy ma'rifat soati"ning navbatdagi sonida Abdulla Qodiriy uy-muzeyiga sayohat uyushtirilibdi👆.
🌐Sayt
✈️Telegram
✅Murojaat
♾Muhokama
🌐Instagram
#sana
2-aprel – Xalqaro bolalar kitobi kuni!
Ikki yilda bir marotaba bolalar adiblari va rassomlariga ushbu adabiyot yo’nalishi bo’yicha asosiy va nufuzli bosh sovrin – Andersen nomidagi oltin medal Xalqaro mukofoti topshiriladi. Buni “Kichik Nobel mukofoti” deb ham ataydilar.
🌐Sayt
✈️Telegram
✅Murojaat
♾Muhokama
🌐Instagram