Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Бароҳат сафар намоед! Замимаи мобилии мо сафари шуморо қулай ва камташвиш хоҳад кард. Тариқи замима мусофирон имкон доранд ба осони сайёҳати худро ба нақша гирифта, чиптаҳоро бо нархи мувофиқу ҷойи муносиб интихоб намоянд ва маблағи бағоҷи аз меъёр зиёдро пардохт намоянд. Замима барои боргирӣ ба iOS ва Android дастрас мебошад.
📱
Путешествуйте с комфортом! Наше мобильное приложение сделает ваше путешествие более удобным и приятным. При помощи приложения пассажиры легко могут спланировать путешествие, подобрать оптимальный тариф для поездки, выбрать удобное место в салоне и оплатить сверхнормативный багаж. Приложение доступно для скачивания на iOS и Android.
📱
Travel in comfort! Our mobile app will make your journey more convenient and enjoyable. With the app, passengers can easily plan their trip, choose the best fare for their journey, select a comfortable seat, and pay for excess baggage. The app is available for download on iOS and Android.
#сомонэйр#somonair#mobileapp
👨🌾🚛 Dalatek — торговая онлайн-площадка в сфере сельского хозяйства. Мы создали для них мобильное приложение📲@dalatek.uz
Подпишись на нас, чтобы не пропустить новые публикации📢
👨🌾🚛 Dalatek — agro sohasida onlayn savdo platformasi.
#designer#mobileapp#Tashkent#Uzbekistan
Follow us: Telegram · Instagram · Dribbble
Attorney Shield Raises $451.96K
Attorney Shield has successfully raised $451.96K on December 17, 2024. The company focuses on enhancing interactions with law enforcement through its innovative mobile app and technology-driven legal services. For more information, visit their website here.
#AttorneyShield#LegalTech#Funding#AppDevelopment#MobileApp#LawEnforcement#Innovation
SociAbility Raises $1.57M
SociAbility has successfully raised $1.57 million in funding to enhance its platform which assists disabled individuals in locating accessible spaces. The funding will help improve the service by providing detailed and reliable accessibility information. Check it out: SociAbility
#Funding#Accessibility#SociAbility#DisabilitySupport#TechForGood#InclusiveDesign#Startup#Innovation#MobileApp#Investment
🚀 AI TRENDS | YouTube Introduces AI Avatar Tool for Shorts Creators
YouTube has launched a new AI avatar tool designed for Shorts creators, allowing them to generate videos of themselves using prompts. According to NS3.AI, this feature enables creators to produce clips lasting up to eight seconds. The rollout began on Wednesday and is accessible through the YouTube app and YouTube Create. Initially, the tool is available to mobile users worldwide, excluding Europe.
#AI#YouTube#AIAvatar#Shorts#ContentCreation#MobileApp#YouTubeCreate#AITrends#TechNews#CreatorTools
Gripp Secures $1.73M Funding
Gripp has successfully raised $1.73 million as of December 16, 2024. Their innovative QR + Mobile App system streamlines equipment maintenance, provides operational knowledge, and offers essential insights into operations.
#Funding#Gripp#MobileApp#EquipmentMaintenance#OperationalInsights#QRSystem#TechInnovation#Investment#Startup#Efficiency#BusinessSolutions