Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
👷♂️Birovning shifti biron joyga qulab tushdi degan voqeani eshitib asabiylashasizmi? Tinch uxlash uchun qanday qurilish materiallaridan foydalanishni bilasizmi?
😊Agar bilsangiz – barakalla. Bilmasangiz, biz sizga yordam beramiz.
☝️KNAUF- PROFIL SHIFT 60x27 osma shiftlarning sinchlarini shakllantirish uchun hamda KNAUF yuzali qoplamalari uchun qo‘llaniladi. Bizning maxsulotlarimiz ana shunday unifikasiyalashgan 👌
Po‘lat qalinligi 0,6 mm bo‘lib, u konstruksiyani mustahkam qiladi hamda burama mixlarning profilda ushlanib qolishini ta'minlaydi.
❓“0,4 mmli profilga nima qilibdi, u arzonroqku, ko‘rinishi ham odatdagiday?” – deb so‘rashingiz mumkin.
““Yupqa” profildan yig’ilgan, mahkamlagichlari qimirlab yotgan sinch, hayotingiz uchun haqiqiy xafv tug‘diradi” – deb javob beramiz.
👉KNAUF-PROFILLAR Texnik Shartlar talablariga muvofiq bo’lib, rux bilan qoplangani tufayli zangdan himoyalangan va aniq geometrik shaklga ega.
Uni ishlatsangiz, kuchshiz sinch haqida va KNAUF-qoplamalarining ulanish joylaridagi yoriqlar haqida unutasiz.
Sifatli maxsulotalarni ishlating.
KNAUF maxsulotalarini ishlating.
❗️Narxi:
KNAUF-Profil shift 3000x60x27x06mm – 8 717 so‘m/p.m.
Brutto-narxi QQS bilan ko‘rsatilgan.
2020 yil 31 dekabrgacha amal qiladi.
- - - - -
👷♂️А Вы начинаете нервничать, услышав очередную историю о том, что у кого-то где-то обрушился потолок? Вы знаете, какой материал использовать, чтобы спать спокойно?
😊Если знаете – молодцы. Если нет, мы подскажем.
☝️КНАУФ-ПРОФИЛЬ ПОТОЛОЧНЫЙ 60х27 применяется для формирования каркаса подвесных потолков. И для облицовок КНАУФ. Вот такие вот у нас унифицированные продукты👌
Толщина стали в 0,6 мм, влияет на прочность конструкции, а так же обеспечивает надёжное удержание шурупа в профиле.
❓«А что не так с профилем 0,4 мм, и дешевле, и на вид такой же?» – спросите вы.
Мы ответим: «Хлипкий каркас с болтающимися крепежами,собранный из «тонких» профилей, создаёт реальную угрозу вашей жизни».
👉КНАУФ-ПРОФИЛИ соответствуют ТУ, защищены от коррозии благодаря цинковому покрытию, имеют четкую геометрию.
Используя его, вы забудете, как о «еле дышащем» каркасе, так и трещинах на стыках КНАУФ-листов.
Используйте качественные материалы.
Используйте КНАУФ.
❗️Цена:
КНАУФ-Профиль потолочный 3000х60х27х06мм 8 717сум/п.м.
Указана брутто-цена с учётом НДС.
Действительна до 31.12.2020 г.
Сайт|Facebook|Instagram
#knaufuzbekistan#profil
👷♂️KNAUF profillarini uzaytirgich bu - o'rnatish ishlarini ham tezlashtiradigan, ham soddalashtiradigan betakror aksessuar.
☝️Qolib ketgan profillarni ulash va ishlatilish uchun qo'llashga imkon beradi.
👌KNAUF PSh 60x27 profillarini ulashda osma shiftlar sinchlarining yaxlitligini saqlaydi.
Texnik xususiyatlari:
Po'lat qalinligi 0,5 mm
100 donadan qadoqlangan.
❗️Shiftlaringizning ishonchli ekanligiga amin bo'ling, to'g'ri jamlovchi mahsulotlardan foydalaning.
KNAUF-dan foydalaning.
- - - - -
👷♂️Удлинитель профилей КНАУФ является незаменимым аксессуаром ускоряющим и упрощающим монтажные работы в разы.
☝️Позволяет применять остатки профилей для их соединения и использования.
👌Сохраняет в целостности каркасы подвесных потолков при соединении КНАУФ-профилей ПП 60х27.
Технические характеристики:
Толщина стали 0,5 мм
Упакован по 100 шт.
❗️Будьте уверены в надежности своих потолков, используйте правильные комплектующие.
Используйте КНАУФ.
Сайт|Facebook|Instagram
#knaufuzbekistan#profil
👷♀️Foydalanish paytida KNAUF pardevorlarining burchaklari va qirralarini himoya qilish uchun KNAUF burchakni himoyalovchi profilidan foydalaning.
Aralashmani (suvoq) konstruksiyaning burchagiga surtish profilning sirtga mahkam yopishishini taʼminlaydi.👌
Texnik xususiyatlari
BH 35/35 kesimi: 35x35 mm;
uzunligi: 3000 mm;
Sifatli materiallardan foydalaning.
KNAUFʼdan foydalaning.
- - - - -
👷♀️Чтобы защитить проёмы и торцы КНАУФ-перегородок во время эксплуатации используйте КНАУФ-профиль углозащитный.
Нанесение раствора (штукатурка) на угол конструкции обеспечивает прочное сцепление профиля с поверхностью.👌
Технические характеристики
Сечение ПУ 35/35: 35x35 мм;
длина: 3000 мм
#knaufuzbekistan#profil#rotband
Mansarda imoratlari – bu shunchaki boloxona emas, balki shinam xonadir.
Uni nima bilan qoplash mumkin?
KNAUF-Sapfir – maqbul yechim!
Nega?
Batafsil: https://knauf.uz/qr/UWJFScWz
- - - - -
Мансардное помещение – это не просто чердак, а уютная жилая комната.
Но чем же ее обшить?
Идеальным решением станет КНАУФ-Сапфир!
Почему?
Подробнее: https://knauf.uz/qr/UWJFScWz
YouTube
Instagram
Telegram
#knaufuzbekistan
#sapfir
#profil
Mansarda imoratlari – bu shunchaki boloxona emas, balki shinam xonadir.
Uni nima bilan qoplash mumkin?
KNAUF-Sapfir – maqbul yechim!
Nega?
Batafsil: https://knauf.uz/qr/UWJFScWz
- - - - -
Мансардное помещение – это не просто чердак, а уютная жилая комната.
Но чем же ее обшить?
Идеальным решением станет КНАУФ-Сапфир!
Почему?
Подробнее: https://knauf.uz/qr/UWJFScWz
YouTube
Instagram
Telegram
#knaufuzbekistan
#sapfir
#profil