Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Importante ‼️
🔴#Banxico reveló que, durante los dos primeros meses de 2026, el envío de #remesas había presentado una ligera caída 💵🔻🇲🇽
https://revistaelpolitico.com/economia/remesas-mexico-crecen-marzo-superan-5-mil-300-mdd/
🇨🇺🌐🇨🇺
✅Recargue su cuenta en MLC/CUP usando criptomonedas.
💠QvaStorebot ofrece la posibilidad de obtener MLC, CUP, Saldo Móvil, Saldo Nauta ó Saldo Qvapay usando Criptomonedas.
👉Servicios que ofrecen
👉Tarifas
💠 Fácil de usar Sólo deben depositar la Criptomoneda que valla a usar y elegir el servicio que van a usar.
👉Criptomonedas aceptadas
✅Link para iniciar el bot:
https://t.me/QvaStore_bot?start=r0279781297
💵 También podrán ganar dinero con su sistema de referidos donde ganarán el 1% de todos los depósitos de sus referidos.
✅ Únase a nuestro canal:
@ganardineroseguro
#remesas#mlc#criptocuba
🎁 Promoción disponible en Tropipay
🎁€10 por registrarse y cumplir con sus términos
🎁€10 por cada referido que cumpla sus términos
👉 Promoción disponible hasta el 15-1-2023
👉Lea sus términos aquí
#tropipay#banktransfer#remesas
🌎 Utiliza los servicios de QvaStore para enviar #Remesas#MLC a #Cuba desde cualquier parte del mundo.
💸 1$ ~ 0.85 MLC
💸 Envías 100$, recibes 85 MLC
💰 Aceptamos #Bitcoin , #BNB , #tron, #USDT-TRC20, #SHIB y mucho más
🤖https://t.me/QvaStore_bot?start=r0279781297
💰 GUÍA: RECIBIR PAGOS INTERNACIONALES EN CUBA 💰
📖 La guía definitiva 2025 ya está disponible
🌍 ¿Freelancer, emprendedor o recibes remesas?
Esta guía es para ti. Aprende a recibir pagos del exterior de forma segura, rápida y sin complicaciones.
✨ En esta guía descubrirás:
✅ Configurar tu cuenta QvaPay en 4 pasos
✅ Recibir pagos con criptomonedas (USDT, BTC, y más)
✅ Convertir tu saldo a CUP, MLC o USD
✅ Usar el mercado P2P de forma segura
✅ Errores comunes que debes evitar
🎯 Métodos para recibir pagos:
💎 Criptomonedas (USDT, BTC, Lightning)
💙 PayPal
🔄 Mercado P2P
🏦 Transferencias bancarias ACH
💡 Caso real:
María, diseñadora freelance en La Habana, pasó de esperar semanas y pagar altas comisiones a recibir sus pagos en 5 minutos y convertirlos a CUP en menos de 1 hora.
QvaPay = De la incertidumbre a la eficiencia total
📚 Lee la guía completa paso a paso:
👉https://qvapay.blog/guides/recibir-pagos-internacionales-cuba-qvapay/
🚀 Tiempo estimado: 10-15 minutos para configurar todo
#QvaPay#PagosInternacionales#Cuba#Freelancer#Remesas#USDT#Guia#Tutorial#P2P#Emprendedores
💳💳💳💳💳💳💳💳💳💳💳
⚠️👾👾👾👾👾
⚠️
🔡🅰️🔡🔡🔡🔡🅰️
✍️✍️✍️✍️✍️✍️✍️✍️
✍️✍️✍️✍️✍️✍️✍️✍️✍️✍️
Adquiera una tarjeta digital prepagada VISA Vanilla y hágase con un método de pago versátil y sencillo de utilizar en cualquier plataforma donde se acepte Visa 💳
Precios en USD
✏️
✏️➡️💲3️⃣3️⃣
✏️
✏️➡️💲6️⃣5️⃣
✏️
✏️
✏️➡️💲1️⃣2️⃣6️⃣
‼️🇨🇺 SERVICIO PARA
TODA #CUBA🇨🇺‼️
Con nosotros podrá tener acceso a esas opciones de pago online que siempre quiso pero no tenía ni idea de que podía hacerlo desde Cuba
Acceso a características Premium en aplicaciones de Diseño y Edición, suscripciones a almacenamiento en la nube, números extranjeros de teléfono virtuales, VPN en cualquier ubicación del mundo, software de producción de audio e imagen, desarrollo web, coding, etc
¡Libros, televisión y música online, videojuegos!
Podemos hacerle llegar suscripciones, códigos y tarjetas digitales de saldo a sus cuentas en...
🛒#Amazon#Prime
📱#Apple#iTunes
🎮#Battlenet (#Blizzard's World of Warcraft #WoW)
ℹ#Dota2
🎮#Garena
🕹#LeagueofLegends
📺#Netflix
🎮#Nintendo
🎮#Origin
🎮#PlayStation Network #PSN
🎮#Riot
🎵#Spotify
🎮#STEAM
💬#Telegram#Premium
📺#Twitch
🎮#Xbox Live
🇨🇺#Remesas#Pagos
📱 Tenemos alternativas para los pagos dentro de la Google Play Store con acceso a Google One y al Play Pass 📱
Contáctenos por #Telegram, por #Google, #Facebook, #Instagram, #Twitter y por #WhatsApp
💬@jcslimcuba
💬https://wa.me/5353717679
🌐https://m.me/jcslimcuba.fb
☎️ +5353717679
🖥https://linktr.ee/jcslimcuba
#saldodesteam#steamwallet#cuba#psn#battlenet#steam#apple#steamgiftcard#jcslimcuba#giftcards#appleitunes#tarjetasderegalo#steamcuba#fortnite#Amazon#amazonmusic#amazonprime#primevideo#promo#visa#vanilla