Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
This underwear can control your #SmartHome!
Skiin smart underwear measure biometrics with sensors that are woven into the garments to track a user's health and make suggestions.
🚀@PerspectiveIX
#smarthome#misc
I have, somehow, 5 different brands of smart home products in our little apartment.
I have no idea what is going on in the smart home industry. Every brand has its own app, hub, or even protocal. So I had to install five different apps to initialize the devices. I could, in principle, ditch these apps and use google/alexa only after I installed them, however, this is still extremely inconvenient as google/alexa doesn’t support all the fancy functions of the devices.
Any solutions to this problem?
💥Detector de Humo Conectado Smartwares FSM-12601
Mantén tu hogar seguro en todo momento
✅OFERTA: 24.99€
❌ Antes: 39.47€
💰Ahorras un 37%🔥
Alerta temprana ante posibles incendios, fácil instalación y cumple con normas d
👉 Protege a tu familia ahora
#rebajas#detectordehumo#seguridadenelhogar#smarthome#ofertas#descuentos#viral#rebajasdeinvierno
🛰️Oferta publicada en Hogar
Alexa is always listening. 🎤
(And so are other apps)
Its microphones are constantly on, collecting voice recordings, tracking your habits, and building voice profiles. This data can be accessed by algorithms, human reviewers, and even third parties. 😬
Protect your privacy:
- Mute the microphone when not in use 🔴
- Delete voice recordings regularly or auto-delete them 🗑️
- Disable human review in the app settings 📱
- Use white noise to mask conversations 🌊
Take control of your data! 🔒
[Source]
@googlefactss#AlexaPrivacy#DataCollection#TechSafety#SmartHome#PrivacyTips
💥Detector de Humo Inteligente Meross MSH450
Protege tu hogar con tecnología de vanguardia
✅OFERTA: 85.49€
❌ Antes: 109.99€
💰Ahorras un 22%🔥
Doble sensor óptico para una detección más precisa, notificaciones en tiempo rea
👉 Mantén tu hogar seguro ahora
#rebajas#detectordehumo#alarmadeincendios#smarthome#seguridadhogar#tecnologiainteligente#ofertas#descuentos
🛰️Oferta publicada en Hogar
💥Enchufe inteligente Wiz para un hogar conectado
Haz de tu casa un lugar más inteligente esta Navidad
✅OFERTA: 7.98€
❌ Antes: 15.99€
💰Ahorras un 50%🔥
Controla tus dispositivos desde cualquier lugar y con comandos de voz
👉 Simplifica tu vida ahora
#wiz#enchufeinteligente#hogarinteligente#smarthome#alexa#googlehome#ofertas#navidad
🛰️Oferta publicada en Hogar
Top Tech Announcements from CES 2025
🔍CES 2025 Highlights:
1. Roborock & Dreame: New vacuum robots with robotic arms, lifting items up to 500g.
2. Lenovo: Introduced ThinkBook Plus Gen 6 with expandable OLED display, from 14 to 16.7 inches.
3. Nvidia: Launched RTX 50 series, featuring DLSS 4 for significant performance boosts.
4. SwitchBot: Unveils modular robot K20 Plus Pro, combines various home tasks.
5. Razer: Debuted Project Ava, a real-time gaming assistant chat-bot.
6. Dell: Introduced a 32-inch QD-OLED monitor that adapts sound to user's head position.
7. TCL: Showcases Ai Me, a companion robot with interactive features.
8. Based Hardware: Reveals Omi, a wearable device with a neuro-helper powered by GPT-4.
9. Withings: Presents the Omnia smart mirror, integrating health data from wearables.
10. Halliday: Launches smart glasses with real-time translation capabilities.
#CES2025#TechAnnouncements#Robots#AI#Nvidia#Gaming#Wearables#SmartHome#Lenovo#Roborock#Dreame#Razer#Dell#TCL#SmartGlasses#HealthTech#Innovations#Gadgets#VR#ComputerHardware#VC