Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
🔥📢MDGram V21📢🔥
#MDGram latest Version
🔥⭐⭐⭐⭐🔥
🟰🟰🟰🟰🟰🟰🟰🟰
🔥New MDGram V21
✅️Update Base Telegram 10.12.0
✅Fixed Crash in change font style
✅Fixed Crash in activity About MDGram
✅Fixed Crash when click in photo profile in Group chats
✅Fixed Small Bugs
🗯All Changelog:https://mdgram.app/
💬 Join to Channel ✅: https://t.me/mdgram_messenger
🟰🟰🟰🟰🟰🟰🟰🟰🟰
🟠🟠IMPORTANT🟠🟠
To download it is recommended to disable adblock
🔗📎Download Now📎🔗
https://mdgram.app
〰️〰️〰️〰️〰️〰️〰️〰️〰️
🔥🔥MDGram V20.5F VERSION FIX 🔥🔥
#MDGram latest Version
🔄🔄🔄🔄🔄🔄
❗️❗️❗️❗️
▪️IMPORTANT PLEASE UNINSTALL PREVIUS VERSIÓN MDGRAMV20
❗️❗️❗️❗️
🟰🟰🟰🟰🟰🟰🟰🟰🟰
🔥New MDGram V20.5F
✅FIXED ERROR WHEN JOINED CHANNEL OR GROUP
🗯All Changelog:https://mdgram.app/
💬 Join to Channel ✅: https://t.me/mdgram_messenger
🟰🟰🟰🟰🟰🟰🟰🟰🟰
🟠🟠IMPORTANT🟠🟠
To download it is recommended to disable adblock
🔗Download Now🔗
https://mdgram.app
〰️〰️〰️〰️〰️〰️〰️〰️〰️
✅✅MDGram V20✅✅
#MDGram latest Version
🔄🔄🔄🔄🔄🔄
⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️
▪️IMPORTANT PLEASE UNINSTALL PREVIUS VERSIÓN MDGRAMV19.
▪️Now MDGRAM V20 has a new package.
⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️
🟰🟰🟰🟰🟰🟰🟰🟰🟰
New from Telegram
✈️ The source code has been updated to Telegram version 10.10.1:
❤️New MDGram V20
° Updated Base
° New package of App: app.mdgram.android
° Edit stickers Enabled
° Fixed Error in Join to group or channel
° Fixed small Bugs
ℹ️ For see More Changelog here 👇👇
📝All Changelog:https://mdgram.app/
🎗Join MDGram community wing :https://t.me/addlist/VmgtOuYGe8VmMDcx
🟰🟰🟰🟰🟰🟰🟰🟰🟰
🟠🟠IMPORTANT🟠🟠
To download it is recommended to disable adblock
👇Download Now👇
https://mdgram.app
〰️〰️〰️〰️〰️〰️〰️〰️〰️
✅✅MDGram V19✅✅
#MDGram latest Version
🔄🔄🔄🔄🔄🔄
🟰🟰🟰🟰🟰🟰🟰🟰🟰
New from Telegram
✈️ The source code has been updated to Telegram version 10.5.0:
• Upgraded Calls;
• Thanos Snap Effect when Deleting Messages.
More details
New MDGram V19
° Scan QR code in chat menu context.
° Fixed Stories Public.
° Fixed Small Bugs.
ℹ️ For see More Changelog here 👇👇
📝 All Changelog: https://mdgram.org/changelog_mdgram/
📣 Join: @mdmods_you
💬 Join: @MDGramClub
🟰🟰🟰🟰🟰🟰🟰🟰🟰
🟠🟠 IMPORTANT 🟠🟠
To download it is recommended to disable adblock
GUIDE FOR DOWNLOAD
Here Click
👇Download Now👇
https://mdgram.org
〰️〰️〰️〰️〰️〰️〰️〰️〰️
[ Álbum ]
✅✅MDGram V18 ✅✅
#MDGram latest Version
🔄🔄🔄🔄🔄🔄
🟰🟰🟰🟰🟰🟰🟰🟰🟰
⭐️ Telegram
🔄Similar Channels
🔄 Reposting Stories
🔄 Video Messages on Stories
🔄 Profile Colors for user Premium
🔄 Wallpapers for Both 🔄 Sides For user premium
🔄 Story Stats for Channels
🔄 Custom Reactions for Channels
🔄 Code Highlighting in Messages
🔄 Improvements for Topics
🟰🟰🟰🟰🟰🟰🟰🟰🟰
✅ MDGram
➡️ Base Updated Telegram 10.3.2.
➡️ Now Home Ui is more ios and more Material You design.
ℹ️ For see More Changelog here 👇👇
📝 All Changelog: https://mdgram.org/changelog_mdgram/
📣 Join: @mdmods_you
💬 Join: @MDGramClub
🟰🟰🟰🟰🟰🟰🟰🟰🟰
👇Download Now👇
https://mdgram.org
〰️〰️〰️〰️〰️〰️〰️〰️〰️
✅✅MDGram V17✅✅
#MDGram latest Version
🔄🔄🔄🔄🔄🔄
🟰🟰🟰🟰🟰🟰🟰🟰🟰
⭐ Telegram
🔄Versión Base Telegram 10.0.9
🟰🟰🟰🟰🟰🟰🟰🟰🟰
✅ MDGram
🔘 Stories For All Users Carpeta
🔘 Fixed Entry ios and Material
⭐ Fixed Search Bar
⭐Fixed Small Bugs
ℹ️ For see More Changelog here 👇👇
📝Todo el registro de cambios: https://mdgram.org/changelog_mdgram/
📣 Únete: @mdmods_you
💬 Únase a: @MDGramClub
🟰🟰🟰🟰🟰🟰🟰🟰🟰
👇Download Now👇
https://mdgram.org
〰️〰️〰️〰️〰️〰️〰️〰️〰️
✳️MDGram V16 ✳️
#MDGram latest Version
🚀🚀🚀🚀🚀🚀
🟰🟰🟰🟰🟰🟰🟰🟰🟰
✅ Telegram
🆕Base Version Telegram 9.5.8
🆕Power saving mode
🆕Read Time in small groups
🆕Granular playback speed
🆕Auto-send invite links
🔄 And More features and Fix
🟰🟰🟰🟰🟰🟰🟰🟰🟰
✅ MDGram
☑️ Added in Settings Translate automatic thanks To Owlgram for Code.
☑️ Fixed Entry Chats ios and Material D.
☑️ Fixed Fonts
☑️ Fixed counter in actionbar Chat in ios Style
☑️ Fixed others Small Bugs
🔎 Apk verified : Check Here
ℹ️ For see More Changelog here 👇👇
📝All Changelog : https://mdgram.app/changelog_mdgram/
📣 Join: @mdmods_you
💬 Join: @MDGramClub
🟰🟰🟰🟰🟰🟰🟰🟰🟰
👇📥DOWNLOAD👇📥
https://mdgram.app
〰️〰️〰️〰️〰️〰️〰️〰️〰️
✅🆒 MDGram V15.5
#MDGram
🚀🚀🚀🚀🚀🚀
🆕 Base Updated Telegram 9.3.3
☑️ FIXED CRASH IN click Chat Secret
☑️ Readed Custom Settings for blur Efect
☑️ Fixed Floating Button in Topics Fragment.
☑️ Fixed Font Arabic
☑️ Fixed and redesign Icon launcher App
☑️ Fixed Bugs
🔍 Apk verified : Check Here
For see More Changelog here 👇👇
To review the changes in detail, visit the links below.
📝All Changelog : CHANGELOG
❗️MDGram Version Playstore current version is V13.5, updated when Google accepts the update ❗️
📣 Join:@mdmods_you
💬 Join:@MDGramClub
👇📥DOWNLOAD👇📥
🔎Link: https://rcmods-apps.xyz/mdgram/mdgram-messenger/
🔥📢MDGram V21📢🔥
#MDGram latest Version
🔥⭐⭐⭐⭐🔥
🟰🟰🟰🟰🟰🟰🟰🟰
🔥New MDGram V21
✅️Update Base Telegram 10.12.0
✅Fixed Crash in change font style
✅Fixed Crash in activity About MDGram
✅Fixed Crash when click in photo profile in Group chats
✅Fixed Small Bugs
🗯All Changelog:https://mdgram.app/
💬 Join to Channel ✅: https://t.me/mdgram_messenger
🟰🟰🟰🟰🟰🟰🟰🟰🟰
🟠🟠IMPORTANT🟠🟠
To download it is recommended to disable adblock
🔗📎Download Now📎🔗
https://mdgram.app
〰️〰️〰️〰️〰️〰️〰️〰️〰️
🔥🔥MDGram V20.5F VERSION FIX 🔥🔥
#MDGram latest Version
🔄🔄🔄🔄🔄🔄
❗️❗️❗️❗️
▪️IMPORTANT PLEASE UNINSTALL PREVIUS VERSIÓN MDGRAMV20
❗️❗️❗️❗️
🟰🟰🟰🟰🟰🟰🟰🟰🟰
🔥New MDGram V20.5F
✅FIXED ERROR WHEN JOINED CHANNEL OR GROUP
🗯All Changelog:https://mdgram.app/
💬 Join to Channel ✅: https://t.me/mdgram_messenger
🟰🟰🟰🟰🟰🟰🟰🟰🟰
🟠🟠IMPORTANT🟠🟠
To download it is recommended to disable adblock
🔗Download Now🔗
https://mdgram.app
〰️〰️〰️〰️〰️〰️〰️〰️〰️