Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
🧠 Kriptoaktivlar bozori hozir ayni damda qanday holatda?
🔥 Crypto O2’da treyderlar, tahlilchilar va platforma vakillarini bir joyga to‘plab, eng dolzarb savollar yuzasidan ochiq suhbat o‘tkazamiz:
— Hozir bozorda faoliyat boshlashga arziydimi?
— Volatillik sharoitida qanday omon qolish va foyda olish mumkin?
— MDHdagi platformalarga ishonch darajasi qanday?
— Nega mahalliy yechimlar muhim va kuchli?
— Asterium bu jarayonda qanday o‘ringa ega?
🎤 Spikerlar: Timur “PainAlive”, Muslim “Mus va kripta”, shuningdek Binance, Asterium, Telegram’dagi Wallet va Blum vakillari.
#CryptoO2#Asterium#CryptoTalks#UzCrypto
1️⃣
🧠 Что происходит с рынком криптоактивов прямо сейчас?
🔥 На Crypto O2 собираем трейдеров, аналитиков и представителей платформ, чтобы честно поговорить о самом важном:
— Стоит ли сейчас входить в рынок?
— Как выживать в условиях волатильности
— Что с доверием к платформам в СНГ
— Почему локальные решения — это сила
— Какую роль в этом всём играет Asterium
🎤 Спикеры: Тимур "PainAlive", Муслим "Мус и крипта", представители Binance, Asterium, Wallet in Telegram и Blum.
#CryptoO2#Asterium#CryptoTalks#UzCrypto
🔥Kriptohamyoningizni so‘m bilan komissiyasiz to‘ldiring!
Asterium’da UZS’da to‘ldirish - 0% komissiya.
Ochiq, shaffof va halol.
✔️ O‘zbekiston litsenziyali kriptobirjasi
✔️ Hech qanday yashirin shartlar va qo‘shimcha to‘lovlar yo‘q
Sizning foydangiz va xavfsizligingiz - bizning ustuvor vazifamiz.
1️⃣
🔥 Пополняй криптокошелёк сумами - без комиссии!
В Asterium пополнение в UZS - 0% комиссии.
Прямо, честно, прозрачно.
✔️ Лицензированная криптобиржа Узбекистана
✔️ Без скрытых условий и дополнительных сборов
Ваша выгода и безопасность - наш приоритет!
#Asterium#AsteriumWallet#AsteriumAngels#CryptoUzbekistan
💡 Kelajakning moliyaviy tizimi allaqachon hayotimizda va u tez o‘zgarib bormoqda.
📌 Crypto O2 tadbirida fintex yetakchilari va regulyatorlar bilan muhokama qilamiz: — CBDC nima va ular bozorga qanday ta’sir qilmoqda
— Raqamli infratuzilma qanday o‘zgaradi
— Yangi instrumentlar bilan bog‘liq xatarlar va tartibga solish
— Ochiq banking — o‘sish drayveri sifatida
— Mintaqada kripto-aktivlarni nimalar kutmoqda
🎤 Spikerlar orasida — NAPP, Alif, ZOOD, Wildberries va Asterium vakillari.
#CryptoO2#Asterium#CBDC#Fintech#DigitalFinance
1️⃣
💡 Финансовая система будущего уже здесь и она быстро меняется.
📌 На Crypto O2 обсуждаем с лидерами финтеха и регуляторами:
— Что такое CBDC и как они влияют на рынок
— Как изменится цифровая инфраструктура
— Риски и регуляции новых инструментов
— Открытый банкинг как драйвер роста
— Что ждёт крипто-активов в регионе
🎤 Среди спикеров — представители НАПП, Alif, ZOOD, Wildberries и Asterium.
#CryptoO2#Asterium#CBDC#Fintech#DigitalFinance
Знакомьтесь: Николай Дедов — спикер ETH Bishkek Hackathon 2025!
Николай — Lead Product Manager по CEX и блокчейн-продуктам в Asterium Wallet, крупнейшей лицензированной криптобирже Узбекистана 🇺🇿 и одном из ведущих игроков Web3-инфраструктуры в регионе.
Тема его выступления:
“From Token to Business: Infrastructure, Compliance, and Trust”
Николай поделится опытом создания и развития криптопродуктов, расскажет, как из токена вырастает бизнес, какие инфраструктурные и комплаенс-вызовы стоят перед компаниями в Web3, и как выстраивать доверие в децентрализованной экосистеме.
📅24 октября
📍Meta Hall, Technopark, Бишкек
Не пропустите выступление специалиста, который объединяет технологию, продукт и стратегию — и помогает строить мост между традиционными финансами и блокчейном ⚡️
🎟 Билеты для посетителей доступны на ethbishkek.xyz
#ETHBishkek#Hackathon#Web3#Ethereum#Asterium#Technopark#Kyrgyzstan#Speaker#CryptoBusiness