Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
🎊 Hot Cross hops into The Metaverse with SecondLive and an out of this world Blind Box Campaign!
🎂 To celebrate the 1-Year Anniversary of #BinanceSmartChain@bsc_official_announcement we are teaming up with @SecondLiveCommunity to give away Limited Edition #HOTCROSS blind boxes and mine $HOTCROSS during the festival.
🎁 To join the campaign, do the following:
🐷 Follow @hotcrossann Announcements
🐷 Join @hotcross TG Group
🐷 Follow Hot Cross on Twitter
🔷 Follow SecondLive on Twitter
🔷 Join @SecondLiveCommunity TG Group
♻️ Retweet the event on Twitter: https://twitter.com/hotcrosscom/status/1430478918423748613
Finally:
📨 Fill in the Gleam form for a chance to win!
https://hotcross.link/secondlive
Good luck to all in the Metaverse and Happy Anniversary to Binance Smart Chain!
🎂 Celebrating the Second hotcross IHO on #binancesmartchain.
🎁#Giveaway time! Woohoo!
20000$ in #Hotcross + $PEL for 1000 winners.
🎁 To join the campaign, do the following:
🐷 Follow @hotcrossann Announcements
🐷 Join @hotcross TG Group
🐷 Follow https://twitter.com/hotcrosscom on Twitter
🔷 Follow https://twitter.com/propelxyz
🔷Follow https://t.me/propelchat
🎆 Follow. https://t.me/propel_ann
♻️ Retweet the event on Twitter:
Finally:
📨 Fill in the Gleam form for a chance to win!
https://gleam.io/PJO9K/the-hot-cross-x-propel-iho-giveaway
Good luck 🤞.
🎂 Celebrating the first ever hotcross IHO on #binancesmartchain.
🎁#Giveaway time! Woohoo!
20000$ in #Hotcross + $toon
🎁 To join the campaign, do the following:
🐷 Follow @hotcrossann Announcements
🐷 Join @hotcross TG Group
🐷 Follow https://twitter.com/hotcrosscom on Twitter
🔷 Follow https://twitter.com/PontoonFi
🔷Follow https://t.me/pontoon_fi group
♻️ Retweet the event on Twitter:
☠☠Read article for more info - https://updates.hotcross.com/p/iho-pontoon-finance
Finally:
📨 Fill in the Gleam form for a chance to win!
https://gleam.io/tGZd0/the-hot-cross-x-pontoon-iho-giveaway
Good luck 🤞.
🔠🔠🔠🔠🔠🔠🔠🔠
Introducing StarTechCoin (STC)
⭐️Get Ready for the Future of Tech Investment!⭐️
🚀 Launching on Binance Smart Chain (BSC)
🔥
🔥
🔥
🔥
🔥
🔥
🔥
Secure, Fast, and Reliable Transactions🙌
🔥
🔥
🔥
🔥
🔥
🔥
🔥
What is Star Tech Coin
STC is your gateway to cutting-edge tech investments. Join us in revolutionizing the tech industry with blockchain power.🔄
🗓Stay Tuned! 👋
🚀ICO Launch Date Announced Soon
💮All Social Link's
Our website: Coming Soon
🔥Telegram link
https://t.me/Startechco
🐤Twitter link
https://x.com/startechcoinSTC?t=dvA_E7PpPpsbI5V5NII-6Q&s=35
📌Linkedin Link
https://www.linkedin.com/in/rav-dhillon-7360431bb?utm_source=share&utm_campaign=share_via&utm_content=profile&utm_mediukm=android_app
#StarTechCoin#StC#Crypto#BinanceSmartChain#ICO#Blockchain
#блокчейн#EVM#Ethereum#база
Что такое EVM-совместимый блокчейн?
EVM (Ethereum Virtual Machine) — это "мозг" Ethereum, который отвечает за выполнение смарт-контрактов. EVM-совместимый блокчейн — это блокчейн, который поддерживает работу этих смарт-контрактов точно так же, как и Ethereum.
👍Преимущества:
• Совместимость: Можно переносить смарт-контракты и dApps с Ethereum без изменений.
• Большое сообщество: Множество разработчиков, инструментов и библиотек, которые можно использовать.
• Низкие комиссии: Некоторые EVM-совместимые блокчейны предлагают более дешевые транзакции, чем сам Ethereum.
📌 Примеры:
#BinanceSmartChain (BSC): Популярный EVM-совместимый блокчейн с низкими комиссиями.
#Polygon: Решение второго уровня для Ethereum с высокой пропускной способностью.
#Avalanche: Предлагает высокую скорость транзакций и EVM-совместимость.
❗️EVM-совместимые блокчейны — это мощный инструмент для разработчиков и пользователей. Они дают возможность работать с уже известными технологиями, но при этом выбирать наиболее подходящие условия.
@MirraChannel😎
🎁🎁 Airdrop: DEFIROCK 🎁🎁
💎💎 NEW GENERATION DEFI ECOSYSTEM 💎💎
💵Total Reward: 10,000,000 $DFR
🔚End date: 30th November
🎁Distribution date: 30th November
👑Each gets 1.000 DFR tokens ($5 USDT) for Airdrop and +30% bonus for every referral
Link airdrop👉 : AIRDROP BOT
💍 Winner : 10 000 slots (500 Top ref + special bonus)
🏆Whitelist start on 25th Oct 2021
🌟Pre-sale on the website on 1st Nov 2021
👑 Complete all tasks of the airdrop
1️⃣🔭 Join our Telegram Bot
2️⃣⛳️ Subscribe Telegram Group & Telegram channel
3️⃣⭐️ Follow Twitter and share pinpost + tag 3 friend with hagtag
#DEFIROCK#DEFI#BSC#Newgem#moonshot#BinanceSmartChain#PlayToEarn
4️⃣👉 Vote for us on COINSNIPER
5️⃣👉 Vote for us on COINVOTE
6️⃣⛳️ Submit your BSC wallet address
7️⃣👉 Refer your friends to get extra bonuses 🤑🤩🤑
🎁🎁 Airdrop: DEFIROCK 🎁🎁
💎 NEW GENERATION DEFI ECOSYSTEM 💎
💵 Total Reward: 10,000,000 $DFR
🔚 End date: 30th November
🎁 Distribution date: 30th November
👑 Each gets 1.000 DFR tokens for Airdrop and +30% bonus for every referral
Link airdrop: 👉AIRDROP BOT
💍 Winner: 10 000 slots (500 Top ref + special bonus)
🏆Whitelist start on 25th Oct 2021
🌟Pre-sale on the WEBSITE on 1st Nov 2021
👑 Complete all tasks of the Airdrop
1️⃣🔭 Join our Telegram Bot
2️⃣⛳️ Subscribe Telegram Group & Telegram Channel
3️⃣⭐️ Follow Twitter and share pinpost + tag 3 friend with hashtag
#DEFIROCK#DEFI#BSC#Newgem#moonshot#BinanceSmartChain#PlayToEarn#NFT#Binance
4️⃣👉 Vote for us on COINSNIPER
5️⃣👉 Vote for us on COINVOTE
6️⃣🏁 Submit your BSC wallet address
7️⃣👉 Refer your friends to get extra bonuses 🤑🤩🤑
⚡ ¡NUEVA PROMO: USDT BSC A SOLO 0.5% FEE! ⚡
🔥 DEL 16 AL 18 DE OCTUBRE
💰 Binance Smart Chain con comisión reducida
💰 Condiciones:
✅ 0.5% fee para montos superiores a $100
✅ $1 fee fijo para montos menores a $100
⏰ Velocidad de procesamiento:
✅ Usuarios KYC ⭐¡AL INSTANTE!
✅👤 Usuarios regulares: 1 a 72 horas
🎯 Ejemplos de ahorro:
✅ Extraes $100 → Solo $1 de fee (normalmente más)
✅ Extraes $500 → Solo $2.50 de fee
✅ Extraes $1,000 → Solo $5 de fee
🎉 ¡RECORDATORIO DE PROMOCIONES VIGENTES!
👍 PayPal 0% Fees
✅ Hasta el 31 de octubre
✅ Montos superiores a $100
✅ ¡Cero comisiones 🔤🔤🔤🔤!
📱 Recarga ETECSA
✅ Cashback de $0.50 disponible
✅ 700 CUP + 20 días internet ilimitado
✅ Por solo $27.99 ($27.29 GOLD)
👑 SPOILER GOLD:
🔜 MUY PRONTO una sorpresa especial para usuarios GOLD... 👀✨
🚀 ¡Octubre está cargado de beneficios en QvaPay!
💡 Pro tip: Combina estas promos y maximiza tus ahorros. ¿Necesitas extraer? ¡Este fin de semana es perfecto para USDT BSC!
🎯 Opera ahora: https://qvapay.com
#QvaPay#USDTBSC#BinanceSmartChain#PromoOctubre#0Fees#PayPal#ETECSA#Cashback#GOLD#Sorpresa#Ahorro#Cripto
⚡️Boost | 📱Twitter | 📱Instagram
🌟TrustPilot | ↔️Ofertas | 🤖Bot
🎁🎁 Airdrop: GunHunterNFT🎁🎁
💎💎 PVP-Metaverse-Earn 💎💎
💵Total Reward: 20,000,000 $GHT
🔚End date: 30th October
🎁Distribution date: 15th Nov
👑 Each gets 200 tokens for Airdrop and 10 tokens for every referral + 1 NFT GunHunterNFT(GHF)
Link airdrop 👉 : t.me/GunHunterNFT_Bot
💍 Winner : 3000 slots (500 Top ref + 2500 random slots.)
🏆Whitelist start on 1st Nov 2021
🌟Pre-sale on the Dxsale on 15th Nov 2021
👑 Complete all tasks of the airdrop
1️⃣🔭 Join Telegram
2️⃣⛳️ Subscribe Telegram Channel
2️⃣⭐️Follow Twitter and share pinpost +tag 3 friend with hagtag
#GunHunterNFT#GHT#Game#NFT#metaverse#BinanceSmartChain#PlayToEarn#P2E#PVP
4️⃣👉Follow Facebook and share pinpost + tag 3 friend with hagtag
#GunHunterNFT#GHT#Game#NFT#metaverse#BinanceSmartChain#PlayToEarn#P2E#PVP
5️⃣⛳️ Subscribe Youtube
6️⃣ Join Discord
7️⃣ Submit your BSC wallet address