Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
#блокчейн#erc20#trc20#база
В чем разница между ERC20 и TRC20?
ERC20 и TRC20 - это два различных стандарта токенов, которые основаны на разных технологиях и функционируют на блокчейн-платформа Ethereum 🥉 и TRON 🥉 соответственно.
❗️Ключевые различия между ERC20 и TRC20:
✔️Сеть: токены ERC-20 созданы в сети Ethereum (ETH), а токены TRC-20 созданы в сети Tron (TRX).
✔️Стиль адреса: Токены ERC-20 используют адреса Ethereum, начинающиеся с «0x», например 0xbd9e..., в то время как токены TRC-20 используют адреса Tron, которые обычно начинаются с «T», например T7zP19...
✔️Скорость передачи: токены TRC-20 обычно имеют более высокую скорость передачи, чем токены ERC-20, потому что в сети Tron более высокая скорость транзакций в секунду (TPS).
✔️Комиссии: токены TRC-20 имеют более низкую комиссию, потому что блокчейн Tron использует другой механизм консенсуса, чем Ethereum, что делает транзакции дешевле.
✔️Способ хранения: токены стандарта TRC-20 поддерживают не все криптовалютные кошельки.
✔️Безопасность: сеть Ethereum является надежной и пользуется большой популярностью.
🟢 Монеты на основе TRON 🥉 становятся все более популярными среди пользователей, поскольку блокчейн Ethereum🥉более перегружен, это приводит к большим комиссиям за транзакции.
📣Не забывайте, что при выборе блокчейна перевода нельзя ошибиться, иначе вы можете потерять отправленные средства. Криптовалюты могут перемещаться только по тем блокчейнам, совместимость с которыми была заложена в них при создании.
@MirraChannel😎
⚡ ¡SOLO POR 24 HORAS! ⚡
💸 Extracciones en USDT (TRC20) con comisiones reducidas.
🫴 Usuarios GOLD → 0% de comisión
✅ Usuarios regulares → solo 0.5%
📅 Válido únicamente el martes 21 de abril, desde las 00:00 hasta las 23:59 (hora de Cuba).
Retira tus USDT al costo más bajo del año. Si aún no eres GOLD, este es el momento perfecto para subir de nivel y aprovechar cero comisiones en todas tus extracciones. 🚀
👉 Entra ahora: https://www.qvapay.com
IMPORTANTE: Recuerde siempre que es para montos superiores a $100
#QvaPay#USDT#TRC20#Crypto#Promo
🤩Fintopio is a new non-custodial wallet in the TON ecosystem
#Fintopio is a cryptocurrency wallet in🪙 Telegram, which can be used via mini app and website. With its help, you can conveniently use #DeFi and #CeFi functions, pay bills, divide expenses, buy goods and transfer money without leaving the application.
To get started quickly, you can import an existing wallet:
🟡Open "DeFi" tab in the Fintopio app
🟡 Click "View all"
🟡 Next – “Import wallet”
🟡 Enter your 12-word secret phrase to import your wallet
👛Currently the wallet supports: #BTC, #USDT [#ERC20/#TRC20], #ETH, #TRX and #TON.
📲 The project has a game to attract an audience where $HP (Hold Points) are farmed. You need to collect coins every 8 hours and in the future you can exchange them for the main utility token of Fintopio named $HOLD.
The token is only available to early participants of the project, the more you #HOLD, the more rewards you will receive from Fintopio.
So it's better to start right now!🚀
Game | Channel | Website