Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
⚡️ Четвер — фінішна пряма тижня!
Свіжий селект турнірів на сьогодні вже підготовлений 🔥
Без фаз і сателітів — лише найстабільніші МТТ з приємними структурами.
🎲 Руми
VBet.ua
PokerStars.com
PokerStars.es
PokerKing (ACR)
GGPoker
RedStar
📎 Реєстрація у Vbet
📎 Реєстрація у RedStar
📎Реєстрація у ACR
🎯 Четвер — варто зіграти уважно, без зайвих ризиків.
Правильні рішення сьогодні роблять вихідний гринд значно сильнішим.
#покер#селект#MTT#покерУкраїна#redstar#vbet#acr#турніри#grind#leaderboard#PhenomPoker
⚡️ Четвер — фінішна пряма тижня!
Свіжий селект турнірів на сьогодні вже підготовлений 🔥
Без фаз і сателітів — лише найстабільніші МТТ з приємними структурами.
🎲 Руми
VBet.ua
PokerStars.com
PokerStars.es
PokerKing (ACR)
GGPoker
RedStar
📎 Реєстрація у Vbet
📎 Реєстрація у RedStar
📎Реєстрація у ACR
🎯 Четвер — варто зіграти уважно, без зайвих ризиків.
Правильні рішення сьогодні роблять вихідний гринд значно сильнішим.
#покер#селект#MTT#покерУкраїна#redstar#vbet#acr#турніри#grind#leaderboard#PhenomPoker
⚡️ Четвер — фінішна пряма тижня!
Свіжий селект турнірів на сьогодні вже підготовлений 🔥
Без фаз і сателітів — лише найстабільніші МТТ з приємними структурами.
🎲 Руми
VBet.ua
PokerStars.com
PokerStars.es
PokerKing (ACR)
GGPoker
RedStar
📎 Реєстрація у Vbet
📎 Реєстрація у RedStar
📎Реєстрація у ACR
🎯 Четвер — варто зіграти уважно, без зайвих ризиків.
Правильні рішення сьогодні роблять вихідний гринд значно сильнішим.
#покер#селект#MTT#покерУкраїна#redstar#vbet#acr#турніри#grind#leaderboard#PhenomPoker
⚡️ Четвер — фінішна пряма тижня!
Свіжий селект турнірів на сьогодні вже підготовлений 🔥
Без фаз і сателітів — лише найстабільніші МТТ з приємними структурами.
🎲 Руми
VBet.ua
PokerStars.com
PokerStars.es
PokerKing (ACR)
GGPoker
RedStar
Phenom
📎 Реєстрація у Vbet
📎 Реєстрація у RedStar
📎Реєстрація у ACR
📎 Реєстрація у Phenom
🎯 Четвер — варто зіграти уважно, без зайвих ризиків.
Правильні рішення сьогодні роблять вихідний гринд значно сильнішим.
#покер#селект#MTT#покерУкраїна#redstar#vbet#acr#турніри#grind#leaderboard#PhenomPoker
⚡️ Четвер — фінішна пряма тижня!
Свіжий селект турнірів на сьогодні вже підготовлений 🔥
Без фаз і сателітів — лише найстабільніші МТТ з приємними структурами.
🎲 Руми
VBet.ua
PokerStars.com
PokerStars.es
PokerKing (ACR)
GGPoker
RedStar
Phenom
📎 Реєстрація у Vbet
📎 Реєстрація у RedStar
📎Реєстрація у ACR
📎 Реєстрація у Phenom
🎯 Четвер — варто зіграти уважно, без зайвих ризиків.
Правильні рішення сьогодні роблять вихідний гринд значно сильнішим.
#покер#селект#MTT#покерУкраїна#redstar#vbet#acr#турніри#grind#leaderboard#PhenomPoker
⚡️ Четвер — фінішна пряма тижня!
Свіжий селект турнірів на сьогодні вже підготовлений 🔥
Без фаз і сателітів — лише найстабільніші МТТ з приємними структурами.
🎲 Руми
VBet.ua
PokerStars.com
PokerStars.es
PokerKing (ACR)
GGPoker
RedStar
Phenom
📎 Реєстрація у Vbet
📎 Реєстрація у RedStar
📎Реєстрація у ACR
📎 Реєстрація у Phenom
🎯 Четвер — варто зіграти уважно, без зайвих ризиків.
Правильні рішення сьогодні роблять вихідний гринд значно сильнішим.
#покер#селект#MTT#покерУкраїна#redstar#vbet#acr#турніри#grind#leaderboard#PhenomPoker
⚡️ Четвер — фінішна пряма тижня!
Свіжий селект турнірів на сьогодні вже підготовлений 🔥
Без фаз і сателітів — лише найстабільніші МТТ з приємними структурами.
🎲 Руми
VBet.ua
PokerStars.com
PokerStars.es
PokerKing (ACR)
GGPoker
RedStar
Phenom
📎 Реєстрація у Vbet
📎 Реєстрація у RedStar
📎Реєстрація у ACR
📎 Реєстрація у Phenom
🔥 Акценти сьогодні:
Лідерборд на Phenom - Ідеальний шанс прокачати свій старт і підвищити EV за рахунок бонусів та лідерборду.
🎯 Четвер — варто зіграти уважно, без зайвих ризиків.
Правильні рішення сьогодні роблять вихідний гринд значно сильнішим.
#покер#селект#MTT#покерУкраїна#redstar#vbet#acr#турніри#grind#leaderboard#PhenomPoker
⚡️ Четвер — фінішна пряма тижня!
Свіжий селект турнірів на сьогодні вже підготовлений 🔥
Без фаз і сателітів — лише найстабільніші МТТ з приємними структурами.
🎲 Руми
VBet.ua
PokerStars.com
PokerStars.es
PokerKing (ACR)
GGPoker
RedStar
Phenom
📎 Реєстрація у Vbet
📎 Реєстрація у RedStar
📎Реєстрація у ACR
📎 Реєстрація у Phenom
🔥 Акценти сьогодні:
Лідерборд на Phenom - Ідеальний шанс прокачати свій старт і підвищити EV за рахунок бонусів та лідерборду.
🎯 Четвер — варто зіграти уважно, без зайвих ризиків.
Правильні рішення сьогодні роблять вихідний гринд значно сильнішим.
#покер#селект#MTT#покерУкраїна#redstar#vbet#acr#турніри#grind#leaderboard#PhenomPoker
🔥 СТАРТУЄМО СЬОГОДНІ НОВИЙ ПРИВАТНИЙ ЛІДЕРБОРД НА $100 У PHENOM POKER! 🔥
Друзі, запускаю ексклюзивну гонку для нашої спільноти! Від сьогодні і по 1 лютого у вас є можливість забрати додатковий кеш просто за гру.
💰 Призовий фонд: $100
Розподіл призових:
🥇 1 місце — $40
🥈 2 місце — $25
🥉 3 місце — $15
🏅 4-5 місця — по $10
ВАЖЛИВО: Щоб приймати участь у лідерборді треба зробити мінімум 10$ рейку.
📈 Як це працює? Граєте в кеш або турніри в румі Phenom Poker. За кожен $1 рейку нараховується 1 бал у лідерборд.
🎁 СУПЕР-БОНУС ДЛЯ НОВИХ ГРАВЦІВ: 200% НА ДЕПОЗИТ!
Якщо ви ще не з нами — зараз найкращий час почати. При першому депозиті ви отримуєте +200% бонусу на свій рахунок. Це неймовірний буст для вашого банкролу!
🔒 ЗАКРИТА ГРУПА ТА ТРЕНУВАННЯ Всі, хто зареєструється за моїм посиланням і зробить свій перший депозит, потрапляють до моєї закритої VIP-групи. Там на вас чекають:
✅ Закриті тренування — розбираємо гру та вчимося перемагати.
✅ Більше розіграшів — додаткові призи тільки для учасників групи.
✅ Ексклюзивний контент та підтримка.
👇 ВАШ ПЛАН ДІЙ:
1️⃣ Зареєструватися в Phenom Poker
2️⃣ Зробити перший депозит та отримати 200% бонусу.
3️⃣ Написати мені в ЛС або під цим постом: свій нікнейм в румі я додам в закриту групу.
ВСІ ХТО ЗАРЕГАЛИСЬ І КАТАЮТЬ ТАМ АВТОМАТИЧНО ПРИЙМАЮТЬ УЧАСТЬ В ЛБ
⏳ Часу обмаль — фініш уже 1-го лютого! Починаємо набивати бали прямо зараз! 🃏🚀
📎 Реєстрація у Phenom
📎 Реєстрація у Phenom
📎 Реєстрація у Phenom
#PhenomPoker#Leaderboard#PokerTraining#Бонус#ПокерУкраїна#Розіграш
🔥 СТАРТУЄМО СЬОГОДНІ! ПРИВАТНИЙ ЛІДЕРБОРД НА $100 У PHENOM POKER! 🔥
Друзі, запускаю ексклюзивну гонку для нашої спільноти! Від сьогодні і по 18 січня у вас є можливість забрати додатковий кеш просто за гру.
💰 Призовий фонд: $100 Розподіл призових:
🥇 1 місце — $40
🥈 2 місце — $25
🥉 3 місце — $15
🏅 4-5 місця — по $10
📈 Як це працює? Граєте в кеш або турніри в румі Phenom Poker. За кожен $1 рейку нараховується 1 бал у лідерборд.
🎁 СУПЕР-БОНУС ДЛЯ НОВИХ ГРАВЦІВ: 200% НА ДЕПОЗИТ!
Якщо ви ще не з нами — зараз найкращий час почати. При першому депозиті ви отримуєте +200% бонусу на свій рахунок. Це неймовірний буст для вашого банкролу!
🔒 ЗАКРИТА ГРУПА ТА ТРЕНУВАННЯ Всі, хто зареєструється за моїм посиланням і зробить свій перший депозит, потрапляють до моєї закритої VIP-групи. Там на вас чекають:
✅ Закриті тренування — розбираємо гру та вчимося перемагати.
✅ Більше розіграшів — додаткові призи тільки для учасників групи.
✅ Ексклюзивний контент та підтримка.
👇 ВАШ ПЛАН ДІЙ:
1️⃣ Зареєструватися в Phenom Poker
2️⃣ Зробити перший депозит та отримати 200% бонусу.
3️⃣ Написати мені в ЛС або під цим постом: свій нікнейм в румі я додам в закриту групу.
ВСІ ХТО ЗАРЕГАЛИСЬ І КАТАЮТЬ ТАМ АВТОМАТИЧНО ПРИЙМАЮТЬ УЧАСТЬ В ЛБ
⏳ Часу обмаль — фініш уже 18-го січня! Починаємо набивати бали прямо зараз! 🃏🚀
📎 Реєстрація у Phenom
📎 Реєстрація у Phenom
📎 Реєстрація у Phenom
#PhenomPoker#Leaderboard#PokerTraining#Бонус#ПокерУкраїна#Розіграш