Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
#Italia
Commento del Presidente del Piemonte Alberto #Cirio (#FI|PPE) sulla decisone di Elena Chiorino (#FdI|ECR) di restituire l’incarico di Vicepresidente della Regione Piemonte:
“Apprezzo il gesto di Elena Chiorino, perché di fronte a questi fatti era necessario dare un segnale e il segnale è che le istituzioni vanno sempre tutelate e messe in sicurezza. Come ho già avuto modo di dire sette anni di conoscenza e di lavoro insieme mi hanno dimostrato la sua capacità e la sua correttezza su cui non nutro alcun dubbio. Tuttavia - prosegue il presidente - anche se ha posto rimedio non appena compresa la situazione, la leggerezza che ha compiuto è stata grave, perché fatta da chi ha ruoli istituzionali importanti e necessitava di una reazione da parte della Regione. Reazione che, come è mia consuetudine, è stata ragionata ed equilibrata: la mia è la scelta di un presidente che non si gira dall’altra parte perché ha a cuore il bene delle istituzioni”.
@Osservatorioitaliano
#Italia#Referendum2026
Il Presidente della Regione Piemonte Alberto #Cirio (#FI|PPE) ha votato ieri verso le 13:30 con suo figlio.
@Osservatorioitaliano
#Italia
Nonostante la dimissioni da Vicepresidente della Regione Piemonte, Elena #Chiorino (#FdI|ECR) resta assessora nella giunta di Alberto #Cirio (#FI|EPP), e sono confermate le sue deleghe: Istruzione e Lavoro. Esponente biellese di Fratelli d'Italia, Chiorino è anche lei coinvolta nell'affaire Delmastro, in quanto è stata titolare di quote, poi lasciate, di un ristorante romano di Miriam Caroccia, figlia diciottenne di Mauro Caroccia, condannato in via definitiva dalla Cassazione perché prestanome del clan mafioso dei Senese.
@Osservatorioitaliano
#Italia#Piemonte
Il caso Delmastro scuote la Regione Piemonte: le opposizioni chiedono la revoca delle deleghe o le dimissioni della Vicepresidente della giunta regionale, Elena #Chiorino (#FdI|ECR).
Fedelissima dell’ex sottosegretario alla Giustizia, Chiorino è socia del ristorante appartenente alla famiglia Caroccia, vicina al clan Senese.
Il Presidente Alberto #Cirio (#FI|EPP), oggi assente in Consiglio regionale per impegni a Bruxelles, annuncia che riferirà in Aula insieme alla sua vice la prossima settimana.
@OsservatorioItaliano
#Italia
❗️ Perde forza l'appello dei governatori a Draghi: dopo il no dei 3 governatori di #FdI|ECR, si sfilano anche i forzisti #Cirio, #Bardi, #Toma e #Occhiuto.
@UltimoraPolitics
#Italia#Piemonte
Il Segretario di #Azione|RE Carlo #Calenda sul nuovo vicepresidente del Piemonte Maurizio #Marrone (#FdI|ECR):
"È un filo putiniano. La nomina di un filo putiniano con una pessima storia di viaggi in Donbass e apertura di finti consolati alla vicepresidenza della Regione Piemonte è di una gravità assoluta e vorrei un intervento diretto di Antonio #Tajani e #Cirio."
Nota: Azione, in Piemonte, fa parte della maggioranza del presidente.
@Osservatorioitaliano