Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
🖱🚫Новая мышка G PRO X Superstrike отправляет игроков в бан! 🚫
🖱
🔴В чем суть?
У мышки есть эксклюзивная фишка — технология HITS. Она делает отклик на нажатие намного быстрее. Если обычные переключатели срабатывают примерно за +-200 мс, то с HITS это происходит за +-150 мс. Разница в +-50 мс кажется небольшой, но для античитов это критично.
🔴Почему это проблема?
Античит видит такую сверхбыструю реакцию и помечает игрока как читера. Раньше такая скорость была возможна только с триггерботом, программой, которая сама стреляет при наведении на врага.
🔴 Что теперь будет?
1. Подстроят ли античиты под такие мышки?
2. Разрешат ли их на турнирах? Ведь преимущество в скорости получается не за счет скилла, а за счет дорогого девайса.
— Сейчас забаненные игроки пытаются опровергнуть свой бан, но пока никаких новостей на этот счет нету и оправдать такое будет крайне тяжело, особенно обычным игрокам😢
САЙТ • МЕНЕДЖЕР • #LOGITECH
Nice Ilya‼️
Наш 🇸🇦Илья Осипов или же "Ооо Илюха Монеси" официально стал амбассадором Logitech и их свежего дропа - мышки G PRO X 2 Superstrike.
А теперь, вопрос: сколько экземпляров он сменит за сезон?
😅 Помним, что прошлую Superlight Илья менял несколько десятков раз по разным причинам..
Делаем ставки в комментариях: доживет ли первая мышка до конца квалификаций IEM Atlanta 2026?
Кстати предзаказать мышку можно на ReShip.pro. Да, цена на старте высока, но терпим🛡🛡🛡
САЙТ • МЕНЕДЖЕР • #LOGITECH
‼️Открыт предзаказ на G PRO X 2 SUPERSTRIKE‼️
Logitech совершили настоящий технологический скачок! Это первая в мире мышь с индукционными переключателями, которые позволяют настраивать не только точку срабатывания, но и тактильный отклик.
В чем уникальность? Под клавишами расположены электромагнитные катушки. Регулируя напряжение через софт, вы буквально меняете физику нажатия: от мягкого и почти бесшумного клика до четкого сопротивления.
- Настройте точку срабатывания.
- Настройте мягкость нажатия.
- Почти беззвучные клики без потери скорости.
🔴Мышек сейчас не хватает, спрос уже превышает предложение. Цена 21.990₽ - оформить предзаказ*
САЙТ • МЕНЕДЖЕР • #LOGITECH
🔥Горячая новинка от Logitech, которую ты точно захочешь!
📊Легендарная Superlight которую используют 70% игроков стала компактнее и легче, сохранив лучшие черты прошлой модели. Встречайте —G PRO X SUPERLIGHT 2 COMPACT:
✔️Стала на 13% меньше
✔️Сенсор HERO2
✔️Оптические переключатели
✔️Донгл 8.000hz в комплекте
✔️Вес 52 грамма
— Многие мечтали о G PRO X, но для кого-то она была велика. Теперь же у тебя будет возможность в полной мере ощутить эту мышку в новом формате.
🗓Точная дата выхода пока не объявлена, но мы сразу сообщим об открытии предзаказа на ReShip.pro!
КАТАЛОГ • МЕНЕДЖЕР • #LOGITECH
☄️Новая магнитная клавиатура Logitech G PRO X TKL RAPID!
- Всё та же G PRO X TKL, но теперь с магнитными, настраиваемыми переключателями
- Настройка до 0.1 миллиметра и точностью срабатывания 0.03 миллиметра
💸Уже в наличии по цене 16.990₽
ОФОРМИТЬ ЗАКАЗ • КАТАЛОГ • #LOGITECH
🎧 ¡Martes de tecnología a precios de risa!
Hoy Amazon ha tirado los precios en básicos tecnológicos: Auriculares inalámbricos Xiaomi por 9,6€ y un ratón Logitech por solo 3,9€ (sí, has leído bien). Además, para combatir el frío, el forro polar Columbia Klamath por 24€ y un inventazo: el secador eléctrico de zapatos para los días de lluvia. 🧥🖱️
👇 Selección del día:
🔥 XIAOMI Auriculares Inalámbricos por 9,6€ (-36% dto)
amzn.to/40jLsQc
🔥 Columbia Klamath Forro Polar por 24,9€ (-38% dto)
amzn.to/4kIHTMX
🔥 CASIO Reloj Mítico por 21€ (-7% dto)
amzn.to/4anWLNq
🔥 Logitech Ratón Ordenador por 3,9€ (-20% dto)
amzn.to/4qF9tMk
🔥 Secador de Zapatos Eléctrico por 14€ (-27% dto)
amzn.to/3OLMMZG
🔥 Neutrogena Protector Labial por 2,2€ (-21% dto)
amzn.to/4kFcA5H
#Xiaomi#Logitech#Columbia#OfertasAmazon#Ahorro