Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Добро пожаловать в #sodalab! 🧪
Это рубрика, в которой мы подробнее рассказываем о наших продуктах, их особенностях и как ими можно пользоваться 🤩
🎄☃️ Праздники уже совсем скоро, так что мы решили запустить рубрику в формате адвент-календаря!
До 31 декабря мы вместе с вами откроем 9 окошек календаря, за которыми скрывается 9 самых актуальных продуктов SODA! 🎊
Начнем? 😼
«В уголках моей памяти
В стороне, удобно расположилось коричневое пианино» 🎶🎹
Давайте поближе познакомимся с некоторыми оттенками из палетки create yo scelf 003 ✨
Первый оттенок – first love ♥️
Вдохновение: сольная песня Шуги из альбома Wings (BTS - First Love)
first love – прессованный шиммер; имеет ненавязчивый розовый оттенок, оставляющий за собой мерцающий шлейф; подойдет и как основа для нежных, и как база для более резких макияжей.
#sodalovesbts#sodalab
Знакомимся ближе с новыми #magicalpower подводками-пигментами! ✨ Супер гибкая формула, с которой вы можете творить что угодно, например:
🫦 Растушевать как жидкие тени.
Берем кисть попушистее, Princess of Lynphea, тушуем, добавляем тушь, блестяшку в уголок глаз и в одно мгновение у вас готов полноценный макияж!
💙 Стрелки и всевозможная графика.
Здесь нам понадобятся всего три вещи: Inner Dragon, любимая тонкая кисть и фантазия
💭
💓 Сиять, Сиять, Сиять.
С Shining Sun можно сделать все вышеперечисленное, еще и нанести его как сияшку в уголок глаза или хайлайтер на щечки и сиять, словно солнышко!
Выбери что-то одно, соедини их все, неважно, пусть ничто не сковывает тебя на пути к шедеврам 🤩
#sodalab#magicalpower
Готовы ворваться в осень? Мы — да! Особенно с двумя новыми парфюмами #cuteadventure
🌫
🧁Любишь сладкие ароматы? Тогда тебе точно понравится туалетная вода Little But Fierce, вдохновленная Хэллоу Китти
😊
Верхние ноты: сочное яблоко, итальянский бергамот.
Средние ноты: взбитые сливки, растопленная карамель.
Базовые ноты: белый мускус, амбра, дубовый мох.
🍑 Хочется чего-то более свежего, фруктового? Присмотрись к туалетной воде Cheeky But Charming, вдохновленной Куроми
😜
Верхние ноты: мандарин, апельсин.
Средние ноты: зелёное яблоко, персик, фиалка.
Базовые ноты: ваниль, мускус.
Ароматы совсем скоро будут в Лэтуале (а где-то уже и есть 👀) и в нашем бутике 🐾
А пока рассказывайте, какой парфюм хотите больше 💜
#sodalab#cuteadventure
Ура! Последнее окошко!
✨SODA Глиттер гель для лица и тела #bizarreshine
POV: Они любили сиять💎
За что любим больше всего: глиттер для лица, для тела, для души… Идеален для новогодней вечеринки, и в общем-то любой другой?.. 🪩
Можно прикладывать к чатам с мальчиками, которые не отвечают — говорят, тоже помогает 👻
Идеальный подарок для тех, кто точно знает, что они звезды, и хотят чтобы всем остальным это тоже было очевидно 💅🏻
#sodalab
Ура, 3 окошко!
💘SODA Набор колец Pink #sugargem
Самые милые кольца на свете, которые излучают любовь❤️
За что любим больше всего: колечки хорошо смотрятся и по отдельности, и вместе, не создавая ощущение специально заготовленного комплекта — а еще их легко сочетать с другими аксессуарами SODA!
🤫 Главный секрет в том, что нежно-розовый – хит сезона (любого!)
Идеальный подарок для всех, кто знает о балеткоре и придерживается нежной эстетики 🌸✨
#sodalab
А вот и 4 окошко!
SODA Жидкая матовая помада #matteaboutyou💋
Может обычно ты больше склоняешься к тинту или блеску… Но праздники просто кричат: нужна помада, 100%🫡
За что любим больше всего: наносится не сложнее тинта и ложится ровно – ты точно справишься!
👊
Но самое впечатляющее — выбор оттенков, от естественных до красных, ярко-розовых, фиолетовых и даже голубого (особенно как подложка под тени) 🤪
Идеальный подарок для тех, кто готов влюбиться в помаду, но не знает, с какой начать 👀
#sodalab
Погрузись в эстетику Лунного Королевства с новыми парфюмами #crystalcastle
💎💎
Они просто идеальны для зимы: красивые, искрящиеся, а аромат просто волшебный 🌿 Сейчас расскажем немного о каждом!
Candy Queen — сладкий и вкусненький 🍭
Представь парк аттракционов, вокруг столько вкусностей: сахарная вата, карамельный попкорн, клубничные леденцы.. 🍭
🏰🍓🍓
✨
Верхние ноты: лимон, клубника.
Средние ноты: герань, ирис, роза, мимоза, жасмин, иланг-иланг.
Базовые ноты: ваниль, карамель, бобы тонка, кедр.
Fruity Princess — пряный и фруктовый 🍇
Ощущается как: холодный фруктовый чай в жаркий летний день, апельсинки в сахаре, душистые травы
🌸🍵🌿🍵🍊
Верхние ноты: апельсин, розовый перец, смородина.
Средние ноты: пачули, фиалка, ирис.
Базовые ноты: пудра, амбра, ваниль.
Floral Empress — нежный и цветочный 🌸
Вайб: кокосики, уют и цветочная лавка, в которую ты случайно заходишь из-за аромата и красоты, которые пленили тебя, проходящую мимо по своим делам 🥥🌸
🌸
🌷🌸
Верхние ноты: яблоко, вишня, груша.
Средние ноты: кокос, жасмин, роза.
Базовые ноты: кашемир, карамель, мускус.
Какой парфюм был буквально создан для тебя? 👀
#sodalab
🥛 SODA Тканевая маска для лица с молочной эссенцией "для сияния кожи" #graceface
Must have для всех, чья кожа одновременно страдает от холода зимы снаружи и жара отопления внутри… А хочется, чтобы еще и макияж красиво ложился.
Мы? 👀
За что любим больше всего: действенность! В каком бы тяжелом состоянии ни была твоя кожа, эта маска увлажнит, смягчит и придаст свежий вид 🥰
🛍 Идеальный подарок для тебя и нас всех, если честно
#sodalab
🌪 SODA Жидкий хайлайтер #showyourself "North Wind"
Всем хайлайтерам хайлайтер! Блеск, напоминающий то ли далекие галактики, то ли зимнюю магию из “Холодного Сердца”❄️
За что любим больше всего: яркость сияния! 🌌 От нежного мерцания свечи до тысячи звезд — все зависит от того, сколько его нанесешь ✨
🌟 Идеальный подарок для той самой подружки, которая обожает быть звездой вечеринки!
#sodalab#sodalovesdisney
Второе окошко! 👀
SODA Палетка теней Into the Unknown #showyourself🧊
Абсолютная база для зимы: 15 глубоких, насыщенных оттенков с различными финишами — от серебристого шиммера до матового бургунди⚡️
☝️ За что любим больше всего: универсальность!
Хочешь легкий искрящийся макияж? Будет! Хочешь драмы в образе? Весь мир у твоих ног!
Идеальный подарок для тех, кто хочет холодную палетку с по-настоящему зимним настроением 😌
P.S. Если будешь пересматривать «Холодное сердце 2» – найдёшь все отсылки в названиях оттенков 👀❄️
#sodalab#sodalovesdisney
Открываем первое окошко! 👀
❄️ Глиттер гель для лица и тела #showyourself "Fifth Element"
Это не просто блестки, это крупный глиттер в форме снежинок и сердечек💕
Он может быть той самой “вишенкой на торте” твоего зимнего макияжа, а может стать главной звездой всего образа
💎
За что любим больше всего: сразу поднимает градус праздника в любом образе, а благодаря своей клейкой гелевой основе стойко держится весь день — приятно, когда твой любимый глиттер остается на лице (или ключицах!), а не размазывается через полчаса по всей одежде 👀
✨ Вдохновлен и назван в честь пятого духа в Холодном Сердце 2, Эльзы – моста между мирами людей и духов ✨
Идеальный подарок для тех, кто обожает зимнюю эстетику и ее атрибуты 🎁
#sodalab#sodalovesdisney