Для телеграм бота нужно принимать имя-фамилию из тг аккаунта. Когда в них юзают символы как "" или "" (пустые символы, лолз не передал) мой функционал выглядит ужасно. Пробовал: async def clean_username(name: str) -> str: if not name.strip(): return "❌ Аноним" INVISIBLE_CHARS = { '\u3164', '\u200B', '\u2060', '\uFEFF', '\u00A0', '\u202F', '\u205F', '\u3000', } name = ''.join( ch for ch in name if unicodedata.category(ch)[0] not in ('C', 'Z') and ch not in INVISIBLE_CHARS ) clean_name = re.sub(r'\s+', '', name) return clean_name if clean_name else "❌ Аноним" Код async def clean_username(name: str) -> str: if not name.strip(): return "❌ Аноним" INVISIBLE_CHARS = { '\u3164', '\u200B', '\u2060', '\uFEFF', '\u00A0', '\u202F', '\u205F', '\u3000', } name = ''.join( ch for ch in name if unicodedata.category(ch)[0] not in ('C', 'Z') and ch not in INVISIBLE_CHARS ) clean_name = re.sub(r'\s+', '', name) return clean_name if clean_name else "❌ Аноним" это не сработало.
hellkarm, ```python async def clean_username(name: str) -> str: if not name.strip(): return "❌ Аноним" INVISIBLE_CHARS = { '\u3164', '\u200B', '\u2060', '\uFEFF', '\u00A0', '\u202F', '\u205F', '\u3000', } name = ''.join( ch for ch in name if unicodedata.category(ch)[0] not in ('C', 'Z') and ch not in INVISIBLE_CHARS ) clean_name = re.sub(r'\s+', '', name) return clean_name if clean_name else "❌ Аноним"``` Код ```python async def clean_username(name: str) -> str: if not name.strip(): return "❌ Аноним" INVISIBLE_CHARS = { '\u3164', '\u200B', '\u2060', '\uFEFF', '\u00A0', '\u202F', '\u205F', '\u3000', } name = ''.join( ch for ch in name if unicodedata.category(ch)[0] not in ('C', 'Z') and ch not in INVISIBLE_CHARS ) clean_name = re.sub(r'\s+', '', name) return clean_name if clean_name else "❌ Аноним"```
а что, всякие сердечки, какашки и прочие эмодзи, знаки препинания, доллары-решетки - это допустимо? Может проще разрешать только допустимый набор символов? def is_valid_string(s): # Разрешенные символы: латинские буквы и цифры allowed_chars = string.ascii_letters + string.digits # Проверяем, что все символы строки входят в allowed_chars return all(char in allowed_chars for char in s) Python def is_valid_string(s): # Разрешенные символы: латинские буквы и цифры allowed_chars = string.ascii_letters + string.digits # Проверяем, что все символы строки входят в allowed_chars return all(char in allowed_chars for char in s) Или если надо с юникодом, то дикпик вот посоветовал: import unicodedata def is_valid_string(s): # Разрешенные символы: буквы (включая русские), цифры и печатные символы allowed_categories = { 'Lu', # Заглавные буквы 'Ll', # Строчные буквы 'Lt', # Заглавные буквы (титульные) 'Lo', # Другие буквы (например, кириллица) 'Nd', # Цифры 'Nl', # Числовые символы (например, римские цифры) 'No', # Другие числовые символы 'Pc', # Соединительные пунктуации 'Pd', # Тире 'Ps', # Открывающие скобки 'Pe', # Закрывающие скобки 'Pi', # Кавычки (начало) 'Pf', # Кавычки (конец) 'Po', # Другие пунктуации 'Sc', # Символы валют 'Sm', # Математические символы 'Sk', # Модификаторы символов 'So', # Другие символы (например, символы валют) 'Zs', # Пробельные символы } for char in s: # Получаем категорию символа category = unicodedata.category(char) # Если символ не входит в разрешенные категории, возвращаем False if category not in allowed_categories: return False return True # Пример использования test_string = "Привет123!#" if is_valid_string(test_string): print("Строка соответствует требованиям") else: print("Строка не соответствует требованиям") Python import unicodedata def is_valid_string(s): # Разрешенные символы: буквы (включая русские), цифры и печатные символы allowed_categories = { 'Lu', # Заглавные буквы 'Ll', # Строчные буквы 'Lt', # Заглавные буквы (титульные) 'Lo', # Другие буквы (например, кириллица) 'Nd', # Цифры 'Nl', # Числовые символы (например, римские цифры) 'No', # Другие числовые символы 'Pc', # Соединительные пунктуации 'Pd', # Тире 'Ps', # Открывающие скобки 'Pe', # Закрывающие скобки 'Pi', # Кавычки (начало) 'Pf', # Кавычки (конец) 'Po', # Другие пунктуации 'Sc', # Символы валют 'Sm', # Математические символы 'Sk', # Модификаторы символов 'So', # Другие символы (например, символы валют) 'Zs', # Пробельные символы } for char in s: # Получаем категорию символа category = unicodedata.category(char) # Если символ не входит в разрешенные категории, возвращаем False if category not in allowed_categories: return False return True # Пример использования test_string = "Привет123!#" if is_valid_string(test_string): print("Строка соответствует требованиям") else: print("Строка не соответствует требованиям")